みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

C# Formの操作

Form2 form2 ; // 子 Form
Form3 form3 ; // 子 Form

private void button1_Click(object sender, System.EventArgs e)
{
form2 = new Form2() ;
this.AddOwnedForm(form2) ; // 親 Form が form2 を所有する
form2.Show() ;
}

private void button2_Click(object sender, System.EventArgs e)
{
form3 = new Form3() ;
this.AddOwnedForm(form3) ; // 親 Form が form3 を所有する
form3.Show() ;
}

上記のようにボタン一つに対して1つのFormに対する処理をするのではなく,ボタン1つに対して
複数のFormを処理する.つまり

例えば,Form1,2,3とあったとして,Form1のボタンを押してFrom2を開き,そこで何らかの処理を
したものをForm1に反映する.または,From3のボタンを押してForm2を開きそこで何らかの処理を
行いForm3に反映する.

この場合,Form1とForm3のどちらのFormのボタンが押されたか判断しないといけないと思うのですが,ここの処理がうまくいきません.

どちらかのFormのボタンを押してForm2を表示し,どちらかのFormに反映させる所までは出来たのですが,両方の判断材料を入れて,どちらのFormのボタンを押されたか判断する際に,押されなかった方が「null」となりエラーになります.

下記にこの判断部分を掲載いたします.どなたかご教授よろしくお願いいたします.

Form1
public int but = 0;
public int butt1;
public string DB;
public string HDB;
public Form2 f2 = null;
private void mybutton1_Click(object sender, EventArgs e)
{
butt1 = 1;



public int Ye=0;
private void button43_Click(object sender, EventArgs e)
{
butt1 = 0;

From2
public partial class Form2 : Form
{
Form1 f1;
Form3 f3;

public Form2(Form1 f)
{
f1 = f; // メイン・フォームへの参照を保存
InitializeComponent();
}
public Form2(Form3 f)
{
f3 = f; // メイン・フォームへの参照を保存
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
#region
int Pin1 = f1.butt1;
int Pin3 = f3.butt3;

Form3
Form1と基本的には同じです.

投稿日時 - 2012-05-21 09:46:42

QNo.7487579

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

そもそも,ModelをViewに反映させるのは個々のFormの仕事であって,他のFormが手を出してはいけません。
なので,Form2がForm1/Form3のコントロールに書き込む,という実装自体が間違いです。

基本的にはForm1やForm3が持っているModelかそれから得られるプロキシのようなModelをForm2に渡して,
Form2はもらったModelを修正し,Modelの修正イベントを拾ってForm1やForm3が自分で書き戻します。
これを自動で行うためにData Bindingsという機構も用意されています。

そこまでやらなくても,Form2自身がModel相当のデータをプロパティで用意し,
さらに修正イベントも提供することでForm1/Form3は自身で値を書き換えることができます。
# ShowDialogで開くなら修正イベントも不要。

投稿日時 - 2012-05-21 10:54:03

あなたにオススメの質問