投稿日 | : 2003/05/06(Tue) 19:01 |
投稿者 | : masat21 |
Eメール | : |
URL | : |
タイトル | : Re^6: VB .NETにて別フォームにあるボタンのプロパティを参照するには? |
回答ありがとうございます。
masat21です。
.NETの奥深さに参りました。
全部載せると分かりづらくなるため、ピックアップしたものを添付します。
アドバイスお願いいたします。
1.モジュール
' フォーム1のインスタンス
Public fm1 As Form1
' フォーム2のインスタンス
Public fm2 As Form2
Public Sub main()
fm1 = New Form1()
fm1.ShowDialog()
End Sub
2.フォーム1
Private Sub Button10_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button10.Click
fm2 = New Form2()
fm2.ShowDialog()
End Sub
3.フォーム2
Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
If CheckBox1.Checked = True Then
fm1.Button1.Enabled = True
End If
'Me.Visible = False
Me.Close()
End Sub
フォーム2上にてフォーム1のプロパティの値を更新しています。
デバッグモードで実行すると、異常終了しダイアログが表示されなくなりました。
原因は下記とは異なるものであると考えられます。
> > > ちなみにSub Mainがスタートアップの場合
> > >
> > > Public frm1 as Form1
> > >
> > > Public Sub Main()
> > > frm1 = New Form1
> > > frm1.ShowDialog()
> > > End Sub
> > >
> > > フォーム1を開く時はこのような処理を行います(最近.NET全然触って無いんで間違ってるかも……)。
> > > このとき「frm1 = New Form1」の部分でインスタンスを作成しています(クラスと同じです)。
> > > で、フォーム2からフォーム1をいじる場合は
> > > frm1.〜
> > > のような記述を行えば出来ます。
> > >
> > 確かに上記のようにすれば、指定されたフォームが表示されますが、これだけでは足りません。
> > 私が望んでいる処理というのは、フォーム2にチェックボタンがあり、このチェックボタンの
> > チェック有無に対応して、フォーム1のボタンの活性/不活性を制御するものです。
> >
> > ところが、フォーム2上で以下のようにしても文法エラーが発生し、実現ができません。
> > (実現例)
> > frm1.Button1.Enabled = FALSE
>
> 試してみたところ、問題無く動いています。
>
文法エラーの原因は、Public frm1 as Form1とするところをなぜか
Public frm1 as Windows.Forms.Formとしたことが原因でした。
大変お騒がせいたしました。
> エラーが出るということはForm2からfrm1をスコープ出来ていないということになります。
> 出来ればフォームのインスタンスを作成しているあたりのソースを提示して頂けるとアドバイスし易いんですが……。