- PR -

C# フォーム上のコントロールを他クラスで取得

1
投稿者投稿内容
はんじゅく
会議室デビュー日: 2008/04/09
投稿数: 2
投稿日時: 2008-04-09 15:23
C#初心者です。

Form1.csで定義されているLabelやProgressBarなんかを他クラス(DBアクセス等の処理を行うクラス)で取得し、Textの内容を取得したり、プロパティを設定する方法が分かりません。
ご教授頂きたいです。
※考えてみたソース↓
[AccessDB.cs]
Form1 fm1 = new Form1();
fm1.progressBar1.Value = 50;

・・で出来なかったです・・
よろしくお願いします。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2008-04-09 15:27
publicとかprivateとかって言って、意味わかります?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-04-09 15:47
引用:

はんじゅくさんの書き込み (2008-04-09 15:23) より:

[AccessDB.cs]
Form1 fm1 = new Form1();
fm1.progressBar1.Value = 50;

・・で出来なかったです・・
よろしくお願いします。


おそらく表示中の Form1 の Control の内容を変えたいのでしょうが、はんじゅくさんの実装では別の Form1 のインスタンスを生成して値をセットしているだけです。 表示中の Form1 とは無関係の Form1 に値を設定しているということです。 この意味がわからないとこれからインスタンス絡みで悩むことになります。(マルチプル インスタンスという概念です)

ちなみに Form1 が呼び出し側、"他クラス" と仰っているのが呼び出される側だとして。 Form1 にある Control の値を参照したい場合は、Form1 が他クラスを呼び出す際に最初から渡してあげれば良いです。 渡し方としてはメソッドの引数だったり、他クラスのプロパティ Getter になるでしょう。 逆に値を設定したい場合は、Form1 側に処理を実装して、Form1 側で設定させるという流れが一般的かと思います。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
手探り
常連さん
会議室デビュー日: 2006/10/20
投稿数: 24
投稿日時: 2008-04-09 15:51
他クラスにフォーム情報を渡すようにするか、
HttpContextなどを利用して
取得したいコントロールをFindControlなどで
探してみては?
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2008-04-09 16:16
おそらくですが、元質問者の方はWindowsアプリを作成されているのではないでしょうか?
手探りさんのおっしゃってるHttpContextやFindControlはASP.NETでないと使えませんね。
手探り
常連さん
会議室デビュー日: 2006/10/20
投稿数: 24
投稿日時: 2008-04-09 16:47
引用:

おそらくですが、元質問者の方はWindowsアプリを作成されているのではないでしょうか?
手探りさんのおっしゃってるHttpContextやFindControlはASP.NETでないと使えませんね。


あっ・・・(汗) そうでした。申し訳ないです。
最近はWebアプリばかりやっていましたので、
頭がそちらにいってました。
はんじゅく
会議室デビュー日: 2008/04/09
投稿数: 2
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)