- - PR -
クラス内でフォームのコントロールを参照する方法は?
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-08-10 15:37
お世話さまです。
初歩的な質問で恐縮なのですが、ここにきてようやくクラスを 使ったプログラミングなるものをVB.NETで始めまして 下記のような壁にぶつかりました。 複数のフォームで共通に使えるクラスとして フォームのラベル(Nameプロパティは統一)に 値をセットするクラスを作りたいのですが、 そのラベルの参照のさせ方が解りません。 Public Class clsSetText Public FormId As Form Public Sub Show() FormId.LabelTest.Text = "テスト" ←この部分の指定の仕方が不明 End Sub End Class フォームにて Dim objSetText As New clsSetText objSetText.FormId = Me objSetText.Show() 各フォームのラベル名称は"LabelTest"に統一 してありますので、クラス内で参照さえさせられれば 使えるようになるものと考えています。 どなたかご教示のほど宜しくお願い致します。 | ||||||||||||
|
投稿日時: 2005-08-10 15:46
こんにちは、じゃんぬ です。
質問内容を全部理解しきれていませんが、
つまり、動的にコントロールを作成しているのですね?
動的に作成する際に、参照用に変数で取っておきましょう。
名前が統一されているのであれば、検索するという邪道な手もあります。 フォーム内のコントロールを名前で探して取得する リンク先は 1 つ取得した時点で返してしまうので、 複数返すように改造すれば、ForEach で Text をセットできるでしょう。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2005-08-10 15:55
「クラス」にフォームを渡すのではなく(あるいはフォームを渡すと共に)
ラベルを渡すようにすればいいのではないでしょうか。 そうすれば、Nameプロパティを統一するという制約もありませんから。 | ||||||||||||
|
投稿日時: 2005-08-10 16:02
じゃんぬねっとさん、早速のレスありがとうございます。
>つまり、動的にコントロールを作成しているのですね? いえ、コントロールそのものは各フォームの所定の位置に 貼り付けてあり、そのテキストプロパティを動的にセットしたいのです。 実は今回のクラスを作る前にクラス内でラベルコントロールを定義し ラベル参照渡しを行って上手く動いていたのですが、 この動的に値をセットしたいラベルが十数個あったため、 フォームの参照のみを渡してクラス内でラベルのハンドリングを 行うように切り替えたかったんです。 貼り付けて頂いたコードのように関数をこしらえないと 参照できないのでしょうか?^^; | ||||||||||||
|
投稿日時: 2005-08-10 16:05
にしざきさん、早速のレスありがとうございます。
>ラベルを渡すようにすればいいのではないでしょうか。 はい、元々はそうしておりました。 ただ、ラベルの数が多いので見た目に美しくなく、 せっかくクラス化するのなら もっと行数を圧縮できないものか?と考えて リファクタリング?しようと思い立った次第でございます。^^; | ||||||||||||
|
投稿日時: 2005-08-10 16:56
こんにちは、じゃんぬ です。
まだ思い違いをしているかもしれません。
そうでしたか、勘違いしていました。(_ _*)
名前で探すのであれば、ですが... 元々、別の場所で管理されているのであれば、それを使いますよね? それがなされていないのであれば、探すしかないとは思いました。
コードの簡素化がリファクタリングじゃあないですよ。 オブジェクト指向言語であれば多少の冗長は気になりません。 というか、冗長になっても保守しやすいのがメリットですし。 # そもそも、設計に問題があるような気がしないまでもないです。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2005-08-10 16:56
共通なラベル(Modifiers=Public)を貼り付けただけのフォームを作成して
複数フォームは、そのフォームを継承させたフォームで作成して、キャスト するなり、継承元フォームで受け取る。なんてのはいかがでしょうか? | ||||||||||||
|
投稿日時: 2005-08-10 17:42
じゃんぬねっとさん、レスありがとうございます。
>それがなされていないのであれば、探すしかないとは思いました。 そもそも入れ物(クラス)の方でインスタンス化の前に そのフォームのコントロールの振る舞いを実装すること自体 がムリなような気がおぼろげながらしてきました。^^; >というか、冗長になっても保守しやすいのがメリットですし。 なるほど、肝に銘じておきます。 ># そもそも、設計に問題があるような気がしないまでもないです。 恐らく、問題だらけだと思います。T-T |