- - PR -
[VB.NET]MDIフォーム間でのオブジェクト操作
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2003-07-16 15:59
MDIを使用したアプリケーションを作成しているのですが、子フォームから親フォームのオブジェクトに対する操作方法がいまいち分からず困っております。
たとえば子フォームから親フォーム(oyaFrom)のツールバー(toolBar1)のEnable属性を変えたいといった場合、VB6であれば子フォーム上で[oyaFrom.toolBar1.Enable=TRUE]等で操作が可能かと思いますがVB.NETでは同じようにはいきませんでした。 とりあえず以下の様に「親フォームのControlsからToolBar1探し出して操作」していますが、これが正しい方法なのでしょうか?もっと簡単に操作が可能なのでしょうか? ご存知の方、ご教授願います。 ------------------------------------- '親フォームを取得しインスタンス化する Dim oyaFrom As Windows.Forms.Form = Me.ParentForm '親フォームのコントロールを取得する For i As Integer = 0 To oyaFrom .Controls.Count - 1 'ツールバー(ToolBar1)が存在するか判定する If oyaFrom.Controls.Item(i).Name = "toolBar1" Then 'ツールバーをインスタンス化する Dim toolBar As System.Windows.Forms.ToolBar = CType(oyaFrom .Controls.Item(i), System.Windows.Forms.ToolBar) 'ツールバーの属性を変更 toolBar.Enable = TRUE End If Next ------------------------------------- | ||||
|
投稿日時: 2003-07-16 16:23
こんにちは。
ただいま「特集「私がJavaからC#に乗り換えた10の理由」について」のスレッドで話があがっていますが、『メンバ変数には外からアクセスさせない』のが流儀?です。したがって、oyaFormに「ツールバーの属性を変更する」というメソッド(プロシージャ、ファンクション)を作り、子フォームからはそのメソッドをコールしましょう。 コントロールを探すのは、FindControlメソッドが便利かと。。。 >'親フォームを取得しインスタンス化する >'ツールバーをインスタンス化する 親フォームをインスタンス化するのはアプリケーションのエントリポイントでの仕事、 親フォームのツールバーをインスタンス化するのは親フォームの仕事です。 ここでは「参照」します。 本物のソースは、forループを最後まで回したりしていないですよね? | ||||
|
投稿日時: 2003-07-16 16:47
早速のご返答ありがとうございます。
>『メンバ変数には外からアクセスさせない』 そうでした!oyaForm側にメソッドを実装するのですね。 #VB6が長かったせいか、フォームのメンバーを操作する関数(メソッド)を #フォームに自身に実装するという発想ができませんでした。 #フォームがクラスであるという頭があれば、理解できた気がします。トホホ。 >コントロールを探すのは、FindControlメソッドが便利かと。。。 なるほど、早速利用してみます。 >親フォームをインスタンス化するのはアプリケーションのエントリポイントでの仕事、 >親フォームのツールバーをインスタンス化するのは親フォームの仕事です。 >ここでは「参照」します。 おっしゃる通り参照でした。 >本物のソースは、forループを最後まで回したりしていないですよね? はい、大丈夫です(^^; | ||||
|
投稿日時: 2003-10-17 23:01
いつもお世話になります。
便乗質問になり申し訳ありません。 当スレッドを参考に子フォームから親フォームの操作を行おうとしたのですが、 本気でわかりません…。 親フォームに作成したメニュー選択で子フォームを起動し、チェックをつけています。 その後、子フォームを閉じた場合メニューのチェックをはずしたいのですが、 外れません。親フォームでインスタンス化と書いてあったので、いろいろ試したのです ができませんでした。 子フォームから親フォームのメニューのチェックをはずし方はどうすればできるのでしょうか? |
1