- - PR -
C# フォーム上のコントロールを他クラスで取得
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-04-09 15:23
C#初心者です。
Form1.csで定義されているLabelやProgressBarなんかを他クラス(DBアクセス等の処理を行うクラス)で取得し、Textの内容を取得したり、プロパティを設定する方法が分かりません。 ご教授頂きたいです。 ※考えてみたソース↓ [AccessDB.cs] Form1 fm1 = new Form1(); fm1.progressBar1.Value = 50; ・・で出来なかったです・・ よろしくお願いします。 | ||||
|
投稿日時: 2008-04-09 15:27
publicとかprivateとかって言って、意味わかります?
| ||||
|
投稿日時: 2008-04-09 15:47
おそらく表示中の Form1 の Control の内容を変えたいのでしょうが、はんじゅくさんの実装では別の Form1 のインスタンスを生成して値をセットしているだけです。 表示中の Form1 とは無関係の Form1 に値を設定しているということです。 この意味がわからないとこれからインスタンス絡みで悩むことになります。(マルチプル インスタンスという概念です) ちなみに Form1 が呼び出し側、"他クラス" と仰っているのが呼び出される側だとして。 Form1 にある Control の値を参照したい場合は、Form1 が他クラスを呼び出す際に最初から渡してあげれば良いです。 渡し方としてはメソッドの引数だったり、他クラスのプロパティ Getter になるでしょう。 逆に値を設定したい場合は、Form1 側に処理を実装して、Form1 側で設定させるという流れが一般的かと思います。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2008-04-09 15:51
他クラスにフォーム情報を渡すようにするか、
HttpContextなどを利用して 取得したいコントロールをFindControlなどで 探してみては? | ||||
|
投稿日時: 2008-04-09 16:16
おそらくですが、元質問者の方はWindowsアプリを作成されているのではないでしょうか?
手探りさんのおっしゃってるHttpContextやFindControlはASP.NETでないと使えませんね。 | ||||
|
投稿日時: 2008-04-09 16:47
あっ・・・(汗) そうでした。申し訳ないです。 最近はWebアプリばかりやっていましたので、 頭がそちらにいってました。 | ||||
|
投稿日時: 2008-04-09 21:20
みなさんありがとうございます。
public,privateの意味はなんとなく分かってるつもりです。 カプセル化とか・・(^^ 実装目的は「Form1→AccessDBの関数を呼び出す」だったので じゃんぬねっとさんの言うとおり、メソッドの引数を増やして対応しました。 class Form1 : Form{ AccessDB db = new AccessDB(); db.Execute(filePath, flg, progressBar1, label1.Text); } # "他クラスのプロパティ Getter"については初耳なので勉強してみます。 またお世話になるときもよろしくお願いします。 |
1