ほかのプロシージャで定義したボタンなどのコントロールを別のプロシージャで、操作するには? への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 nakaP  (社会人)
投稿日時
2009/12/25 04:00:04
>フォームは同じフォームを、複数表示させたいので
>Form1_Loadの、外で dim b as new form2
>と、
>宣言すると、一つしか出ないのですが解決策ないですか?
MDIFormみたいなことがしたいのでしょうか。
同一のものを複数利用したい場合は配列を使います。
クラス変数(Form_Loadなどのプロシジャ外で宣言した変数)の場合はDimステートメントではなくPrivateステートメントを利用したほうが良いです。
クラス変数の場合は、利用する直前にインスタンスの生成(New)をしたほうが良いです。
以上をまとめると以下のような感じ。
手書きなので細かいところは間違ってるかも。
>Form1_Loadの、外で dim b as new form2
>と、
>宣言すると、一つしか出ないのですが解決策ないですか?
MDIFormみたいなことがしたいのでしょうか。
同一のものを複数利用したい場合は配列を使います。
クラス変数(Form_Loadなどのプロシジャ外で宣言した変数)の場合はDimステートメントではなくPrivateステートメントを利用したほうが良いです。
クラス変数の場合は、利用する直前にインスタンスの生成(New)をしたほうが良いです。
以上をまとめると以下のような感じ。
Public Class Form1
Private f(2) As Form2
Private Sub Button1_Click(Byval sender As Object, Byval e As System.EventArgs) Handles Button1.Click
f(0) = New Form2()
f.TopLebel = False
Me.Controls.Add(f(0))
f(0).Show()
End Sub
Private Sub Button2_Click(Byval sender As Object, Byval e As System.EventArgs) Handles Button2.Click
f(1) = New Form2()
f.TopLebel = False
Me.Controls.Add(f(1))
f(1).Show()
End Sub
Private Sub Button3_Click(Byval sender As Object, Byval e As System.EventArgs) Handles Button3.Click
f(2) = New Form2()
f.TopLebel = False
Me.Controls.Add(f(2))
f(2).Show()
End Sub
End Class
手書きなので細かいところは間違ってるかも。
投稿者 winvis  (社会人)
投稿日時
2009/12/24 07:33:30
nakaPさん、ご指摘ありがとうございます
後者ですね・・・
語弊を生むようなタイトルで、申し訳ございませんorz
後者ですね・・・
語弊を生むようなタイトルで、申し訳ございませんorz
投稿者 nakaP  (社会人)
投稿日時
2009/12/24 00:27:05
こんにちは。
>Form1_Loadで、定義したボタン・フォームを、Button1_clickなどの、別のプロシージャで操作するにはどうすればいいですか?
この質問は、
>Form1_Loadで、定義したボタン・フォームで、Button1_clickなどのイベントを発生させるのにはどうすればいいですか?
と、
>Form1_Loadで、定義したボタン・フォームを、元々用意されているButton1_clickなどの、別のコントロールのイベントプロシージャで操作するにはどうすればいいですか?
の2通りの捉え方ができます。
前者ならAddHandlerで紐付け、後者ならプロシージャ変数をクラス変数にすれば解決できます。
>Form1_Loadで、定義したボタン・フォームを、Button1_clickなどの、別のプロシージャで操作するにはどうすればいいですか?
この質問は、
>Form1_Loadで、定義したボタン・フォームで、Button1_clickなどのイベントを発生させるのにはどうすればいいですか?
と、
>Form1_Loadで、定義したボタン・フォームを、元々用意されているButton1_clickなどの、別のコントロールのイベントプロシージャで操作するにはどうすればいいですか?
の2通りの捉え方ができます。
前者ならAddHandlerで紐付け、後者ならプロシージャ変数をクラス変数にすれば解決できます。
投稿者 トマト  (小学生)
投稿日時
2009/12/23 23:35:26
わかりにくくてすいませんでした。
>番号って、何でしょうか?
追加した順番のことです。
Controlsプロパティはコレクションなので、ほぼArrayListと同じような使い方ができます。
↓
というように使えます。
>>確か、iをString型にしてコントロールのNameプロパティの値にしても行くと思います。
とは、こういう事なのでしょうか?
そうです。詳しくはhttp://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard20.htmで。
>一つしか出ないのですが解決策ないですか?
???????????????????????
>番号って、何でしょうか?
追加した順番のことです。
Controlsプロパティはコレクションなので、ほぼArrayListと同じような使い方ができます。
Dim list As New ArrayList
MsgBox(list(0)) '0番の内容が表示される。
↓
MsgBox(Me.Controls(0).Text) 'フォームのコントロール0番のTextプロパティを表示
というように使えます。
>>確か、iをString型にしてコントロールのNameプロパティの値にしても行くと思います。
とは、こういう事なのでしょうか?
そうです。詳しくはhttp://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard20.htmで。
>一つしか出ないのですが解決策ないですか?
???????????????????????
投稿者 まだまだ  (中学生)
投稿日時
2009/12/23 06:43:34
コード未検証ですが、こんなのはどうでしょう。
ControlのNameプロパティを設定して、Ctypeで動かす。
こんなもんでいかがでしょうか。
ControlのNameプロパティを設定して、Ctypeで動かす。
Private Sub Button1_Click(....)
Dim c As New Label
c.Name = "Label1"
Me.Controls.Add(c)
End Sub
Private Sub Button2_Click(....)
Ctype("Label1" , Label).Text = "新しいLabel"
End Sub
こんなもんでいかがでしょうか。
投稿者 winvis  (学生)
投稿日時
2009/12/23 03:54:45
迅速な返答ありがとうございます。
Private Sub Button1_Click(sender As Object, e As EventArgs)
Dim i As Integer = 番号
Dim o = Me.Controls(i) 'VB2008でない場合はControl型で
'↓処理を書く
End Sub
の番号って、何でしょうか?
>確か、iをString型にしてコントロールのNameプロパティの値にしても行くと思います。
とは、こういう事なのでしょうか?
Dim i As String = a.Name
Dim o = Me.Controls(i)
If o.Visible = True Then
o.Visible = False
Else
o.Visible = True
End If
それと、フォームは同じフォームを、複数表示させたいので
Form1_Loadの、外で dim b as new form2
と、
宣言すると、一つしか出ないのですが解決策ないですか?
Private Sub Button1_Click(sender As Object, e As EventArgs)
Dim i As Integer = 番号
Dim o = Me.Controls(i) 'VB2008でない場合はControl型で
'↓処理を書く
End Sub
の番号って、何でしょうか?
>確か、iをString型にしてコントロールのNameプロパティの値にしても行くと思います。
とは、こういう事なのでしょうか?
Dim i As String = a.Name
Dim o = Me.Controls(i)
If o.Visible = True Then
o.Visible = False
Else
o.Visible = True
End If
それと、フォームは同じフォームを、複数表示させたいので
Form1_Loadの、外で dim b as new form2
と、
宣言すると、一つしか出ないのですが解決策ないですか?
投稿者 トマト  (小学生)
投稿日時
2009/12/23 02:59:55
Form1のControlsコレクションに追加したのだから
確か、iをString型にしてコントロールのNameプロパティの値にしても行くと思います。
もう1つ
Private Sub Button1_Click(sender As Object, e As EventArgs)
Dim i As Integer = 番号
Dim o = Me.Controls(i) 'VB2008でない場合はControl型で
'↓処理を書く
End Sub
確か、iをString型にしてコントロールのNameプロパティの値にしても行くと思います。
もう1つ
Public Class Form1
Dim a As New Button
Dim b As New Form2
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.Controls.Add(a)
b.Toplevel = False
Me.Controls.Add(b)
b.Show()
End Sub
投稿者 winvis  (学生)
投稿日時
2009/12/23 01:55:54
こんばんわ、winvisといいます。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
dim a as new button
dim b as new form2
me.controls.add(a)
b.toplevel = false
me.controls.add(b)
b.show
end sub
Form1_Loadで、定義したボタン・フォームを、Button1_clickなどの、別のプロシージャで操作するにはどうすればいいですか?
操作する内容
ボタンの場合
form2のボタンを、controls.removeで、削除する
フォームの場合
最大化・最小化する
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
dim a as new button
dim b as new form2
me.controls.add(a)
b.toplevel = false
me.controls.add(b)
b.show
end sub
Form1_Loadで、定義したボタン・フォームを、Button1_clickなどの、別のプロシージャで操作するにはどうすればいいですか?
操作する内容
ボタンの場合
form2のボタンを、controls.removeで、削除する
フォームの場合
最大化・最小化する
こういう方法が、有るんですね、ありがとうございます。