- PR -

[VB.NET]MDIフォーム間でのオブジェクト操作

1
投稿者投稿内容
くろんぱす
会議室デビュー日: 2003/06/24
投稿数: 2
投稿日時: 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
-------------------------------------
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-07-16 16:23
こんにちは。
引用:

くろんぱすさんの書き込み (2003-07-16 15:59) より:
たとえば子フォームから親フォーム(oyaFrom)のツールバー(toolBar1)のEnable属性を変えたいといった場合、VB6であれば子フォーム上で[oyaFrom.toolBar1.Enable=TRUE]等で操作が可能かと思いますがVB.NETでは同じようにはいきませんでした。


ただいま「特集「私がJavaからC#に乗り換えた10の理由」について」のスレッドで話があがっていますが、『メンバ変数には外からアクセスさせない』のが流儀?です。したがって、oyaFormに「ツールバーの属性を変更する」というメソッド(プロシージャ、ファンクション)を作り、子フォームからはそのメソッドをコールしましょう。


コントロールを探すのは、FindControlメソッドが便利かと。。。

>'親フォームを取得しインスタンス化する
>'ツールバーをインスタンス化する
親フォームをインスタンス化するのはアプリケーションのエントリポイントでの仕事、
親フォームのツールバーをインスタンス化するのは親フォームの仕事です。
ここでは「参照」します。

本物のソースは、forループを最後まで回したりしていないですよね?
くろんぱす
会議室デビュー日: 2003/06/24
投稿数: 2
投稿日時: 2003-07-16 16:47
早速のご返答ありがとうございます。

>『メンバ変数には外からアクセスさせない』
そうでした!oyaForm側にメソッドを実装するのですね。

#VB6が長かったせいか、フォームのメンバーを操作する関数(メソッド)を
#フォームに自身に実装するという発想ができませんでした。
#フォームがクラスであるという頭があれば、理解できた気がします。トホホ。

>コントロールを探すのは、FindControlメソッドが便利かと。。。
なるほど、早速利用してみます。

>親フォームをインスタンス化するのはアプリケーションのエントリポイントでの仕事、
>親フォームのツールバーをインスタンス化するのは親フォームの仕事です。
>ここでは「参照」します。
おっしゃる通り参照でした。

>本物のソースは、forループを最後まで回したりしていないですよね?
はい、大丈夫です(^^;







デハビランド
会議室デビュー日: 2003/10/17
投稿数: 1
投稿日時: 2003-10-17 23:01
いつもお世話になります。
便乗質問になり申し訳ありません。
当スレッドを参考に子フォームから親フォームの操作を行おうとしたのですが、
本気でわかりません…。

親フォームに作成したメニュー選択で子フォームを起動し、チェックをつけています。
その後、子フォームを閉じた場合メニューのチェックをはずしたいのですが、
外れません。親フォームでインスタンス化と書いてあったので、いろいろ試したのです
ができませんでした。

子フォームから親フォームのメニューのチェックをはずし方はどうすればできるのでしょうか?


1

スキルアップ/キャリアアップ(JOB@IT)