[リストへもどる]
一括表示

投稿時間:2003/04/25(Fri) 15:57
投稿者名:masat21
Eメール:
URL :
タイトル:
VB .NETにて別フォームにあるボタンのプロパティを参照するには?
masat21です。
VB .NETにてユティリティ画面の構築を行っているところです。

処理方式は、以下のとおりです。
(1)オプションボタンがあるフォーム1を作成する。位置づけとしては、オプションメニューである。

(2)オプションボタンの活性/不活性等を制御するためのチェックボタンがあるフォーム2を作成する。
 フォーム2のチェックボタンは、フォーム1のボタンを対応しているものとする。

(3)フォーム2のチェックボタンのチェックがない場合は、フォーム1のボタンは不活性となる。

質問は、(3)を行った際に、(1)のボタンを不活性にするタイミングはどこでしょうか?
すなわち、フォーム1のプロパティ上にあるEnableの値をフォーム2から参照するには、どのように
すればよろしいのでしょうか?

-以上-

投稿時間:2003/04/25(Fri) 16:40
投稿者名:nanashi
Eメール:
URL :
タイトル:
Re: VB .NETにて別フォームにあるボタンのプロパティを参照するには?
フォーム2から参照できるようにフォーム1のインスタンスを作ればいいです。
例えば標準モジュール内にPublicでフォーム1を用意しておくとか。

投稿時間:2003/04/25(Fri) 18:12
投稿者名:masat21
Eメール:
URL :
タイトル:
Re^2: VB .NETにて別フォームにあるボタンのプロパティを参照するには?
> フォーム2から参照できるようにフォーム1のインスタンスを作ればいいです。
> 例えば標準モジュール内にPublicでフォーム1を用意しておくとか。

masat21です。
回答いただきありがとうございます。
しかし、回答の意味が分かりません。
フォーム1のインスタンスを作成するとは、どういうことでしょうか?
また、どのような手順を踏まえるのでしょうか?

投稿時間:2003/04/25(Fri) 18:57
投稿者名:nanashi
Eメール:
URL :
タイトル:
Re^3: VB .NETにて別フォームにあるボタンのプロパティを参照するには?
フォーム1を表示する時はどのような処理をしていますか?
あ、ひょっとしてスタートアップがフォーム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.〜
のような記述を行えば出来ます。

VB6.0までの時は暗黙の了解でFormクラスがPublicになっていましたが
VB.NETでは自分でインスタンスを作成する癖をつけた方が良いですね。

投稿時間:2003/05/06(Tue) 16:33
投稿者名:masat21
Eメール:
URL :
タイトル:
Re^4: VB .NETにて別フォームにあるボタンのプロパティを参照するには?
回答ありがとうございます。
masat21です。
質問を以下に示します。

> フォーム1を表示する時はどのような処理をしていますか?
> あ、ひょっとしてスタートアップがフォーム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

> VB6.0までの時は暗黙の了解でFormクラスがPublicになっていましたが
> VB.NETでは自分でインスタンスを作成する癖をつけた方が良いですね。

P.S.
 .NETって奥深いものですね!

投稿時間:2003/05/06(Tue) 18:11
投稿者名:nanashi
Eメール:
URL :
タイトル:
Re^5: VB .NETにて別フォームにあるボタンのプロパティを参照するには?
> > ちなみに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

試してみたところ、問題無く動いています。

エラーが出るということはForm2からfrm1をスコープ出来ていないということになります。
出来ればフォームのインスタンスを作成しているあたりのソースを提示して頂けるとアドバイスし易いんですが……。

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

投稿時間:2003/05/07(Wed) 10:07
投稿者名:nanashi
Eメール:
URL :
タイトル:
Re^7: 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で間違いないですか?

投稿時間:2003/05/07(Wed) 10:24
投稿者名:masat21
Eメール:
URL :
タイトル:
Re^8: VB .NETにて別フォームにあるボタンのプロパティを参照するには?
回答いただきありがとうございます。
masat21です。
コメントを以下に示します。

> > 回答ありがとうございます。
> > 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で間違いないですか?

間違いなくSub Mainになっています。
にもかかわらず、異常終了するのはVBのバグではないでしょうか?
それとも、何らかのパッチをインストールする必要があるのでしょうか?
それにしてもVB .NETは奥深いですね!

投稿時間:2003/05/07(Wed) 10:31
投稿者名:nanashi
Eメール:
URL :
タイトル:
Re^9: VB .NETにて別フォームにあるボタンのプロパティを参照するには?
> 間違いなくSub Mainになっています。
> にもかかわらず、異常終了するのはVBのバグではないでしょうか?
> それとも、何らかのパッチをインストールする必要があるのでしょうか?

う〜ん、状況を再現出来ないのでなんとも言えません。
少なくとも私の環境では特別なことは一切していないので。
お役に立てなくて申し訳ないです。

ちなみに異常終了とはどういう感じなのでしょうか?

投稿時間:2003/05/07(Wed) 10:42
投稿者名:masat21
Eメール:
URL :
タイトル:
Re^10: VB .NETにて別フォームにあるボタンのプロパティを参照するには?
masat21です。
エラーの内容は以下のとおりです。
何か分かりませんか?

-----------------------------------------------------------------
'System.ComponentModel.Win32Exception' のハンドルされていない例外が
system.windows.forms.dll で発生しました。

追加情報 : ウィンドウのハンドルを作成中にエラーが発生しました。
-----------------------------------------------------------------

> > 間違いなくSub Mainになっています。
> > にもかかわらず、異常終了するのはVBのバグではないでしょうか?
> > それとも、何らかのパッチをインストールする必要があるのでしょうか?
>
> う〜ん、状況を再現出来ないのでなんとも言えません。
> 少なくとも私の環境では特別なことは一切していないので。
> お役に立てなくて申し訳ないです。
>
> ちなみに異常終了とはどういう感じなのでしょうか?

投稿時間:2003/05/07(Wed) 11:15
投稿者名:nanashi
Eメール:
URL :
タイトル:
Re^11: VB .NETにて別フォームにあるボタンのプロパティを参照するには?
> masat21です。
> エラーの内容は以下のとおりです。
> 何か分かりませんか?
>
> -----------------------------------------------------------------
> 'System.ComponentModel.Win32Exception' のハンドルされていない例外が
> system.windows.forms.dll で発生しました。
>
> 追加情報 : ウィンドウのハンドルを作成中にエラーが発生しました。
> -----------------------------------------------------------------

すいませんが、分かりません。

一度、この掲示板に提示した必要最低限のソースでプロジェクトを作って動作チェックをして下さい。
それでもエラーが出るようなら何らかのトラブルが起こってる可能性はあります。

投稿時間:2003/05/07(Wed) 14:04
投稿者名:masat21
Eメール:
URL :
タイトル:
[解決]VB .NETにて別フォームにあるボタンのプロパティを参照するには?
masat21です。
VB .NETの初心者である私に対し、いろいろアドバイスいただきありがとうございました。
先ほどの件ですが、アドバイスどおりにプロジェクトを再度作り直して実行したところ、
フォーム1からフォーム2のプロパティの参照ができました。(逆も可能)

いままで使用していたプロジェクトに何らかの問題があるようです。
いまは、業務が多忙なためすぐにはできませんが、一段落したら参照ができなかった原因に
ついて調査しようと考えています。

投稿時間:2003/05/07(Wed) 10:52
投稿者名:よねKEN
Eメール:
URL :http://www5b.biglobe.ne.jp/~yone-ken/
タイトル:
Re^9: VB .NETにて別フォームにあるボタンのプロパティを参照するには?
> > > デバッグモードで実行すると、異常終了しダイアログが表示されなくなりました。

私もここでいう異常終了というのがどういう状況を指しているのかわかりません。
異常終了するのは、自分のアプリなんですよね?それとも開発環境ですか?
開発環境はVS.NETですか?VB.NET standardですか?

・突然、起動していたはずのアプリが消えてなくなっているのでしょうか?
・それとも例外が発生し、スタックトレースの表示されたダイアログがでているのでしょうか?
・それともWindowsの「不正な処理を・・・」なエラーメッセージが出ているのでしょうか?

コードのどの箇所でこの問題が発生しているのか、問題箇所はつきとめましたか?

> にもかかわらず、異常終了するのはVBのバグではないでしょうか?

問題点をはっきりさせれば、プログラム側の問題なのか、
VB(といより.NET Framework)側の問題なのかはだいたいわかります。
発生している現象とその問題発生箇所をまずはっきりさせましょう。

はっきりしていない段階で安易にVBのバグではないか?
みたいなことは言わない方がいいですよ。

> それとも、何らかのパッチをインストールする必要があるのでしょうか?

OS(及びSP)、開発環境、.NET Frameworkのバージョン(及びSP)など
どういう環境で開発されているのですか?

現在の.NET Framework SDK日本語版は1.0のSP2が最新です。
.NET Framework日本語版そのものはすでにVer1.1も出ています。
MSDN会員だとVS.NET 2003も使用できますし。