標準モジュールや、フォームなどから
別のフォーム上にあるコントロールを操作する方法を教えてください。
たとえば、Form2の何らかのイベントでForm1内のボタンに
visible = false
などの変更を加える方法です。
単純に、
Form1.button1.visible = false
とやると、「非共有メンバを参照するにはオブジェクト参照が必要です」
といわれます。なので、
Dim Form1 As New Form1()
を入れればとりあえずエラーではなくなりますが、これでは新たにインスタンスを
作成しているだけで、現在表示されているForm1に変更が加わるわけではないので
どうしたらよいのか分からず行き詰まっています。
よろしくおねがいします
単純にやった方法でいいはずなんですけどね。
ところで同じプロジェクトですか?
この場合は関数の引数としてコントロールを与えてやるとよいと思います。
注意する点としてはByRefで渡す必要があります。
'呼出し
call Module1.g_AAAAA(Me.Command1)
'標準モジュールの関数
Public Sub g_AAAAA(ByRef a_Button as CommandButton)
a_Button.Visible = False
end Sub
とういう具合です。
この例だと引数の型が"CommandButton"になっていますが、
"Object" でも動きます。
レスありがとうございます。
>多分さん
6.0まではそれでできたのですが、.NETからはできないようです。
>t@kiさん
ありがとうございます。ByRefで渡す方法なら確かに出来そうです
でもコントロールの操作に関してはその関数の本筋ではないので
引数として渡すのにはちょっと問題ありそうです(仕事なので)
このような6.0ソースを.NETにアップグレードすると
Form1.Definstance.Button1.visible = False
と変換され、問題なく動きます。
フォームにアップグレードに伴うコードが追加され
そのおかげでこのような表記が出来るようになるようです。
意味は理解できませんでした。
この変のことご存知な方いらっしゃいませんでしょうか
フォームのプロパティとしてコントロールを設定するという
やり方もあります。
こうすれば、好きなときにコントロールをいじることができます。
'フォームモジュール内変数
Option Explicit
dim m_Command1ptr as CommandButton
----------------------------------------------------------------------
'フォームのプロパティ設定
Property Set p_Command1(ByVal a_Command1 as CommandButton)
m_Command1ptr = a_Command1
end Property
Property Get p_Command1()
p_Command1 = m_Command1ptr
end Property
'標準モジュール呼出し
p_Command1= Me.Command1 '//関数を呼び出す前に参照を設定
call g_AAAAA
'標準モジュールの関数
Public Sub g_AAAAA()
Form1.p_Command1.Visible = False
end Sub
とういう具合でどうですか?
すみません訂正です。
間違い
Property Set p_Command1(ByVal a_Command1 as CommandButton)
m_Command1ptr = a_Command1
end Property
Property Get p_Command1()
p_Command1 = m_Command1ptr
end Property
訂正
Property Set p_Command1(ByVal a_Command1 as CommandButton)
Set m_Command1ptr = a_Command1
end Property
Property Get p_Command1()
Set p_Command1 = m_Command1ptr
end Property
お返事遅くなりました。すいません。
やはり.NETでは普通の手段では、別モジュールへの操作は出来ないのですね
その方が言語としては理路整然としてるのでしょうが、如何せん不便です
.NETはコントロール配列がなくなってたりしているので
イベントや参照だけならTagで代用できるとしても、プロパティの変更等は
Forで回してまとめてやることが出来なくなっているので不便だし…
ラベルが重なるとラベル同士では透過しないのも不便…
この3点はかなり大問題です。
レスありがとうございました。