スタートアップフォームのコントロールに他のクラスからアクセスしたいのですが、アクセスできません。どのようにアクセスすればいいのでしょうか?よろしくお願いします。
あんまり得策じゃないけど…アクセス修飾子をPublicにする、とか?
フォーム自体はPublicだし、コントロールもFriendになってるのでアクセスできるはずなのです。多分インスタンス名じゃなくてフォームのクラス名でアクセスしようとするからダメなのですかね。でもスタートアップフォームだからインスタンス名がわからない。知る方法はありますか?
Application.Run(New Form1())
とかなっているのなら、
クラス変数なりに、
public sfrm as form1
と宣言して、
sfrm=New Form1()
Application.Run(sfrm)
としてみてはどうでしょ?
…ダメですかね?
自分は良く分からないので、スタートアップフォームでそういう記述がどこにあるか分かりませんでした。
フォームのインスタンスを作成しているような記述は見当たりませんでした。
んー、.NETじゃないのかなぁ…
では、環境を書いてください。←最初に訊くべき(orz
>では、環境を書いてください。←最初に訊くべき(orz
いやむしろ最初に書くべき。
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200509/05090041.txt
↑の質問者の方と同じ方であれば多分[VB.NET]でしょう。
(ハンドルが同じでも自分の開発環境はスレッドごとに記入お願いします)
>スタートアップフォームでそういう記述がどこにあるか分かりませんでした。
>フォームのインスタンスを作成しているような記述は見当たりませんでした。
ええ、ありません。スタートアップフォームがそういう意味ですから。
複数のクラスでフォームの参照を使いたい場合、スタートアップの設定を
Sub Main にしてガッさんのレス通り
> Application.Run(sfrm)
を使うのが形として良いと思われます。オブジェクト指向を気にするなら
親のクラスが Form1 の参照を一括して管理するのが重要です。
別の方法でスタートアップフォームが自分自身(Me)の参照をモジュール等
グローバルな変数に設定する方法もあります。が、Form 自身の参照を
外部に渡すという事は、外部で破棄されたり変更されたりする手段を与える
…という事ですので良い形ではありません。
同じ理由で、Form 上のコントロールも、直接その参照を外部に公開せず、
Form にそのコントロールを設定するプロパティやメソッドを用意して
設定させます。
http://www.bcap.co.jp/hanafusa/bbs/wforum.cgi?mode=allread&no=2017&page=0
他のクラスからアクセスはしないほうがいいのですね・・・
回答ありがとうございました。
ツイート | ![]() |