- PR -

コンポーネントからのイベント通知?

1
投稿者投稿内容
ハラグチ
会議室デビュー日: 2002/12/05
投稿数: 4
投稿日時: 2003-02-05 22:07
現在C#.NETでWindowsアプリケーションを開発してます。

フォームAを持つA.exeがあります。フォームAにはテキストボックスAとボタンAがあります。
ボタンAを押すとコンポーネントB.dllのフォームBが表示されます。フォームBには3つのテキストボックスがあり、数字を入力してフォームB上のボタンBを押下すると、フォームBを閉じてフォームAのテキストボックスにフォームBで入力した3つの数字の合計が表示されます。

この様なアプリケーションを開発する方法として、

(1)iniファイル的なものを使用し、B.dllで3つの合計値をiniに記述する。A.exeはiniファイルから値を取得する。A.exeはファイルのタイムスタンプをタイマー監視。

(2)フォームBでボタンBを押したときのイベントをフォームA側に通知する(イベントとデリゲートを使用すれば上手く行きそうな気が、、、)

上記の方法を考えました。(1)は実現可能かと思うのですが(VBでこの手を使いました)、(2)についていまいち確信が持てないというか、そもそもそんな事は可能だろうか?と思いまして投稿させて頂きました。

ご意見いただけると助かります。

[ メッセージ編集済み 編集者: ハラグチ 編集日時 2003-02-05 22:09 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-02-06 08:31
 フォームBのプロパティを取得する、じゃぁダメなんですか?
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2003-02-06 09:37
>フォームBでボタンBを押したときのイベントをフォームA側に通知する

ということはできます。できますが、フォームBを閉じるなら、Jittaさんの仰るように素直にプロパティ等を作り、ShowDialog()終了後、値を取得するのが(プログラム設計的に)良いと思います。

やりかたですが、デザイナでボタンBを貼り付けたままですとボタンBはprivateですので、ボタンB.Clickにはアクセスできません。ボタンBをpublicにしたり、ボタンB.Click起動時に起動するイベントをフォームBに作るなり、何通りも方法はあると思います。


>(2)についていまいち確信が持てないというか、そもそもそんな事は可能だろうか?と思い

なぜ実際に小さなプログラムを作ってテストしてみませんでしたか?
もし「やり方がまったく検討もつかない」という状態でしたら、仕事で納期が迫っているという状態で無い限り、まず.NETについてもう少し理解を深めるのが成功への近道だと思います。
特にイベント、デリゲートといったキーワード辺りの。
小野@どっとねっとふぁん
ぬし
会議室デビュー日: 2001/10/30
投稿数: 402
投稿日時: 2003-02-06 09:47
フォームBをダイアログとして表示したい場合は一郎さんがおっしゃってる方法が
良いですね。
そのほかに、フォームA側に自分のテキストボックスの値を操作できるようなpublicの
プロパティを追加しておいて、フォームBでボタンを押したときにそのプロパティに
値をセットする、という方法もあります。
この場合、フォームAのことをフォームBに教えてあげないといけないので、フォームAを
フォームBのownerにしてやるとか、フォームA自体(this)をフォームBの生成時などに
渡してあげるなどのやり方をとる必要がありますね。
1

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