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

投稿時間:2003/03/17(Mon) 11:41
投稿者名:ひろぽん
Eメール:
URL :
タイトル:
MDIにおける変数の定義方法について
こんにちは。

今、MDIでアプリを作成してます。
それでSDIで作成していた変数をどうやってMDIに拡張したらいいか分からず悩んでます。
具体的には、節点数を格納する変数があります。SDIでは単純に次のように定義してます。
     Dim Node_Num As Integer

これをMDIに拡張する場合は、今のところ、
    '変数定義
     Dim Window_No As Integer   '子フォームカウンタ(子フォームを開くたびに+1)
     Dim Node_Num() As Integer  '子フォームカウンタを用いた動的配列
     …
     '子フォーム生成
     Window_No = Window_No + 1                                'Window_Noの加算
     ReDim WorkForm(WindowNo) As New FrmWork      '子フォームを生成(子フォームカウンタを用いた配列)
     ReDim Preserve Node_Num(WindowNo) As Integer  'Node_Numの動的配列宣言
            …
     Node_Num(WindoNo) = ***     'Node_Numに節点数を代入
といったコーディングしか思いつきません。
これでは、Node_Numを参照したいときに、どうにかしてアクティブな子フォームからWindow_Noを
取得しなければなりません。

私が理想とするのは、
     Me.Node_No
みたいにできるだけ単純にNode_Noを参照できればと考えてますが、何かいい方法はないでしょうか。
(上の参照方法は、子フォームに対するプロパティみたいな形になっているので、これは厳しいかと思いますが・・・)

以上の件、よろしくご教授下さい。お願い致します。

投稿時間:2003/03/17(Mon) 13:01
投稿者名:これ
URL :
タイトル:
Re: MDIにおける変数の定義方法について
> こんにちは。
>
> 今、MDIでアプリを作成してます。
> それでSDIで作成していた変数をどうやってMDIに拡張したらいいか分からず悩んでます。
> 具体的には、節点数を格納する変数があります。SDIでは単純に次のように定義してます。
>      Dim Node_Num As Integer
> これでは、Node_Numを参照したいときに、どうにかしてアクティブな子フォームからWindow_Noを
> 取得しなければなりません。
>
> 私が理想とするのは、
>      Me.Node_No
> みたいにできるだけ単純にNode_Noを参照できればと考えてますが、何かいい方法はないでしょうか。
> (上の参照方法は、子フォームに対するプロパティみたいな形になっているので、これは厳しいかと思いますが・・・)
>
> 以上の件、よろしくご教授下さい。お願い致します。

こんにちは。
MDIフォーム内でのアクティブな子フォームは
ActiveFormプロパティで取得できますので
子フォームにPublicなプロパティを追加すれば
可能では無いでしょうか?
具体的には
子フォームは

Dim Node_Num As Integer
として、さらに
Public Property Get pNodeNum() AS Integer
    pNodeNum = Node_Num
End Property
でプロパティを追加します。

MDIフォーム側で必要な時に
Dim wkChild as Form

Set wkChild = Me.ActiveForm
ChildNode_Num = wkForm.pNodeNum
Set wkChild = Nothing

とすれば
アクティブな子フォームのNode_Numが取得できます。

投稿時間:2003/03/17(Mon) 15:30
投稿者名:ひろぽん
Eメール:
URL :
タイトル:
Re^2: MDIにおける変数の定義方法について
> こんにちは。
> MDIフォーム内でのアクティブな子フォームは
> ActiveFormプロパティで取得できますので
> 子フォームにPublicなプロパティを追加すれば
> 可能では無いでしょうか?
> 具体的には
> 子フォームは
>
> Dim Node_Num As Integer
> として、さらに
> Public Property Get pNodeNum() AS Integer
>     pNodeNum = Node_Num
> End Property
> でプロパティを追加します。
>
> MDIフォーム側で必要な時に
> Dim wkChild as Form
>
> Set wkChild = Me.ActiveForm
> ChildNode_Num = wkForm.pNodeNum
> Set wkChild = Nothing
>
> とすれば
> アクティブな子フォームのNode_Numが取得できます。

ご回答ありがとうございます。

子フォームにもクラスを用いてプロパティを追加できるのですね。→知らなかったです。
てことは、Property Letを使うと設定も可能になるという事でよろしいでしょうか。

それと、もうひとつ質問があります。
作成中のプログラムは、計算結果ファイル1つにつき子フォームをひとつ使用します。
計算結果ファイルを読み込むと、子フォームが開き、計算結果で得られた変形図(PictureBox利用)が
表示され(初期はStep0)、MDIフォームに配置した再生ボタンを押すと、解析Step分の変形の様子が
アニメーションみたいに見れるといった感じのプログラムです。

最初に見たい数だけファイルを開いて(子フォームを生成して)おいて、続いて任意の子フォームを
アクティブにして、MDIフォームにある再生ボタンを押すと、アクティブな子フォームの変形の様子が
表示されるようにしたいのですが、上記の方法でも可能でしょうか?

つまり、Set wkChild = Nothingとすると、変数が初期化?されてしまい、情報がなくなるため、
アクティブな子フォームが変わる毎にもう一度計算結果ファイルを読み直さないといけないのではないかと
思ったからです。

すいませんが、よろしくご教示下さい。

投稿時間:2003/03/17(Mon) 18:04
投稿者名:これ
URL :
タイトル:
Re^3: MDIにおける変数の定義方法について
> ご回答ありがとうございます。
>
> 子フォームにもクラスを用いてプロパティを追加できるのですね。→知らなかったです。
> てことは、Property Letを使うと設定も可能になるという事でよろしいでしょうか。

MDIフォームから設定する必要がある場合はそうなりますね。

> それと、もうひとつ質問があります。
> つまり、Set wkChild = Nothingとすると、変数が初期化?されてしまい、情報がなくなるため、
> アクティブな子フォームが変わる毎にもう一度計算結果ファイルを読み直さないといけないのではないかと
> 思ったからです。
>
> すいませんが、よろしくご教示下さい。

Set wkChild = NothingはActiveな子フォームの
コピーであるwkChildの解放だけなので(と私は理解していますが)
子フォームが閉じられない限り
子フォーム毎の内容は保持されてるはずですよ。
(と私は信じていますし、私のヤツでは残っています)

お判りかとは思いますが
子フォームのコントロール操作
例えばCommand1_Click とかも Public 指定しておけば
MDIフォーム側で
Set wkForm = Me.ActiveForm
Call wkForm.Command1_Click
こういう呼び方が出来ます。

投稿時間:2003/03/18(Tue) 08:56
投稿者名:ひろぽん
Eメール:
URL :
タイトル:
Re^4: MDIにおける変数の定義方法について
> Set wkChild = NothingはActiveな子フォームの
> コピーであるwkChildの解放だけなので(と私は理解していますが)
> 子フォームが閉じられない限り
> 子フォーム毎の内容は保持されてるはずですよ。
> (と私は信じていますし、私のヤツでは残っています)
>
> お判りかとは思いますが
> 子フォームのコントロール操作
> 例えばCommand1_Click とかも Public 指定しておけば
> MDIフォーム側で
> Set wkForm = Me.ActiveForm
> Call wkForm.Command1_Click
> こういう呼び方が出来ます。

ありがとうございます。
確認のコーディングをしないまま、投稿してしまいました。

簡易的なMDIを作成し、クラスを用いてMDIフォーム側から子フォームを
制御するようなプログラムを作りまして、ご回答いただいた方法でうまくいく事を確認できました。