VB6.0用掲示板の過去のログ(No.1)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [過去ログ] [管理用]

投稿日: 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をスコープ出来ていないということになります。
> 出来ればフォームのインスタンスを作成しているあたりのソースを提示して頂けるとアドバイスし易いんですが……。


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- Web Forum -