DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ある値の変化を2つのフォームで受け取りたい

分類:[.NET]

お世話になります。
Form1 から呼び出した Form2 に表示されたグリッドをクリックすると、
Form1 のテキストボックスの値が変わり、Fomr1にあるボタンを押すと、テキストボックスの値が変わるとともに、
Form2 のフォーカスされているグリッドの行も移動する、というプロシージャを作りたいと思っています。
どのようにしたらよいのでしょうか?

Form1 上で Form2 を宣言し、 Form2.show() して開いているのですが、
どうもうまくいきません。

おそらく、共通で使える変数を置く Public Class を作り、それにForm1のボタンやForm2のグリッドの行の位置を入れるようにし、
その値が変化すると Form1, Fomr2 の該当するオブジェクトに働きかけることにする、という具合にどこかで書けばよいのだろうと思うのですが...。
そうするには、どうしたらよいのでしょう?
また、それ以外に有力なやり方はありますでしょうか?

当方エクセルVBAからの移行者で、オブジェクト指向についてはあまり理解していません。
(が、なるべく分かるべく努力します)
どうかよろしくお願いいたします。
こんにちは、Ken-Koさん。ピラルクです。

>そうするには、どうしたらよいのでしょう?

「共通で使える変数」をPropertyで定義することにより
「その値が変化する」ときにおこなう処理を組み入れる
ことが可能になります。

> また、それ以外に有力なやり方はありますでしょうか?

有力かどうかは別として、ごくノーマルに発想すると、
・テキストボックスへの値set
・グリッドの選択行をset
という他のFormから呼ぶ必要のある機能はPublic Method
として公開し、ユーザーの起こしたイベントからそれらを
呼びだす。(循環しないように注意)
ピラルクさんこんばんは。 Ken-Ko です。
いろいろいじっているうちに、お返事がおそくなりました。

> 「共通で使える変数」をPropertyで定義することにより
> 「その値が変化する」ときにおこなう処理を組み入れる
> ことが可能になります。

これがいちばん簡単そうで、イベントハンドラ等いろいろ見てみたのですが、
ちょっと分からなかったので、2つのフォーム他を別に作ったクラスに変数として置き、
全部それをいじるという方法で一応解決させました。
ただ、いかにもメモリを多量に消費しそうで、良くないな、と思っています。
(ここで話題にでた2つのフォームはそれほど頻繁に登場しないものなので)

またいろいろいじっているうちに、スッキリ理解できるだろうというような気がしてきました。
もうちょっと研究してみます。

ありがとうございました。今後ともよろしくお願いいたします。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板