ダイアログやフォームを開くとき、そのフォームに対して値を渡す方法を記述します。
続きを読む
概要
ここでは別フォームに対してパラメータを渡し、その値を別フォームで編集して返すコードを記述します。
別フォームに値を渡す方法として Showメソッド に対して引数を追加しています。
Showメソッド の戻り値として別フォームから値を受け取ります。
つまりShowメソッドをオーバライドして独自のメソッドを作っています。
同じようなコードは Google先生にきけば いくらでも出てくるのですが、
ダイアログに対して値を渡すだけで、そのまま捨ててしまうものばかりです。
申し訳ないのですがそんなゴミコードをいくら教えてもらっても全く持って意味がないです。
というわけで、ちょっとサンプルを載せることにします。
ついでに ShowDialogメソッド は使用しないため削除(見えないように)しています。
実行環境
Microsoft Visual Studio 2008 Professional(VB.NET)
.NET Framework 2.0
※2003/2005でも、それ以降でも同じことができます。
サンプルプロジェクト
ここで使用するプロジェクトは以下からダウンロードできます。
サンプルプロジェクトのダウンロード
解凍すると以下の構成になっています。
./SampleProject
+ SampleProject
| + frmMain.vb ----> メインフォームクラス
| + dlgEdit.vb ----> 値を渡すダイアログ
+ SampleProject.sln ----> プロジェクトファイル
+ SampleProject.suo
ダイアログ(別フォーム)呼び出し側の処理
以下にコードを示します。
ボタンを押すとダイアログを開く、それだけです。
ここではテキストボックスに入力された文字列をダイアログに渡しています。
1. |
2. |
3. |
4. |
5. |
6. |
7. |
8. |
9. |
10. |
11. |
12. |
13. |
14. |
15. |
16. |
17. |
18. |
19. |
20. |
21. |
22. |
23. |
24. |
25. |
26. |
|
Public Class frmMain |
|
Private Sub btnDlgOpen_Click(ByVal sender As System.Object, _ |
ByVal e As System.EventArgs) Handles btnDlgOpen.Click |
|
|
Dim myDialog As dlgEdit = New dlgEdit |
|
|
Dim myResult As dlgEdit.EditDialogResult = myDialog.Show(Me, txtInput.Text) |
|
|
If Not myResult Is Nothing Then |
txtInput.Text = myResult.Text |
End If |
|
|
myResult = Nothing |
|
|
|
|
|
End Sub |
End Class |
|
|
ダイアログ(別フォーム)側の処理
以下にコードを示します。
Showメソッド呼び出し時に文字列を保存し、フォームロード時にテキストボックスに格納しています。
ここでDialogResultは意味がないため使用していません。
またこのサンプルでは×ボタンが押されたときのことは考えていません。
対応する場合、Load時に d_MyEditText を破棄し、OKボタン押下時に New すれば完璧だと思います。
1. |
2. |
3. |
4. |
5. |
6. |
7. |
8. |
9. |
10. |
11. |
12. |
13. |
14. |
15. |
16. |
17. |
18. |
19. |
20. |
21. |
22. |
23. |
24. |
25. |
26. |
27. |
28. |
29. |
30. |
31. |
32. |
33. |
34. |
35. |
36. |
37. |
38. |
39. |
40. |
41. |
42. |
43. |
44. |
45. |
46. |
47. |
48. |
49. |
50. |
51. |
52. |
53. |
54. |
55. |
56. |
57. |
58. |
59. |
60. |
61. |
62. |
63. |
64. |
65. |
66. |
67. |
68. |
69. |
70. |
71. |
72. |
73. |
74. |
75. |
76. |
77. |
78. |
79. |
80. |
81. |
82. |
83. |
84. |
85. |
86. |
87. |
88. |
89. |
90. |
91. |
92. |
93. |
94. |
95. |
96. |
97. |
98. |
99. |
100. |
101. |
102. |
103. |
104. |
105. |
106. |
107. |
108. |
109. |
110. |
111. |
112. |
113. |
114. |
115. |
116. |
117. |
118. |
119. |
120. |
121. |
122. |
123. |
124. |
125. |
126. |
127. |
128. |
129. |
130. |
131. |
132. |
133. |
134. |
135. |
136. |
137. |
138. |
|
Option Strict On |
Option Explicit On |
|
Public NotInheritable Class dlgEdit |
|
|
|
|
|
|
|
|
|
|
|
|
Public Class EditDialogResult |
|
Public Text As String |
|
|
Sub New() |
Me.Text = vbNullString |
End Sub |
|
End Class |
|
|
|
|
|
Private d_MyEditText As EditDialogResult = Nothing |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Public Shadows Function Show(Optional ByVal avOwner As _ |
System.Windows.Forms.IWin32Window = Nothing, _ |
Optional ByVal avEditText As String = vbNullString) _ |
As EditDialogResult |
|
|
d_MyEditText = New EditDialogResult |
|
|
d_MyEditText.Text = avEditText |
|
|
If avOwner Is Nothing Then |
MyBase.ShowDialog() |
Else |
MyBase.ShowDialog(avOwner) |
End If |
|
|
Return d_MyEditText |
End Function |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<System.ComponentModel.EditorBrowsable( _ |
System.ComponentModel.EditorBrowsableState.Never), _ |
Obsolete("This method should not be used.")> _ |
Public Shadows Function ShowDialog( _ |
ByVal avOwner As System.Windows.Forms.IWin32Window) _ |
As System.Windows.Forms.DialogResult |
Throw New ApplicationException("This method should not be used.") |
Return (Nothing) |
End Function |
|
|
|
|
|
|
Private Sub OK_Button_Click(ByVal sender As System.Object, _ |
ByVal e As System.EventArgs) Handles OK_Button.Click |
|
d_MyEditText.Text = txtEdit.Text |
Me.Close() |
End Sub |
|
Private Sub Cancel_Button_Click(ByVal sender As System.Object, _ |
ByVal e As System.EventArgs) Handles Cancel_Button.Click |
|
d_MyEditText = Nothing |
Me.Close() |
End Sub |
|
Private Sub dlgEdit_Load(ByVal sender As System.Object, _ |
ByVal e As System.EventArgs) Handles MyBase.Load |
|
|
Me.txtEdit.Text = d_MyEditText.Text |
End Sub |
End Class |
|
時計コピー