- PR -

イベントから別フォームに値表示

1
投稿者投稿内容
takk
会議室デビュー日: 2003/12/25
投稿数: 4
お住まい・勤務地: シアワセ町
投稿日時: 2003-12-25 18:05
  はじめて投稿します初心者です。よろしくお願いします。
 実はform2のマウスアップイベントでform1のtextBox1,textBox2にform2で
クリックしたXY座標値を表示したいと思っていますがうまく表示されません。
Form2にて
private void Form2_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e){
    Form1 form1 = new Form1();
    form1.textSet( e.X,e.Y );
}

Form1にて
private void Form1_Load(object sender, System.EventArgs e){
    Form2 form2 = new Form2();
    form2.Show();
}
public void textSet(double x, double y){
    //MessageBox.Show( x.ToString() );
    this.textBox1.Text = x.ToString();
    //MessageBox.Show( y.ToString() );
    this.textBox2.Text = y.ToString();
}
と、値は間違いなくきてるのですが。。。
その原因とどうすればよいのか教えていただきたいのです。。
 よろしくお願いいたします。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2003-12-25 18:16
Form1のForm1_Load()で生成され、そしてShow()されたForm2のインスタンス(form2)。
そのform2のForm2_MouseUp()でForm1の新しいインスタンス(form1)を生成していますね。
このform1は、form2の親画面(であるForm1型のインスタンス)ではありません。別の新しいForm1型のインスタンスです。
ですので、textSet()を呼んでも親画面のテキストボックスの値は変わらないかと。

Form2_MouseUp()内でform1.Show()してみれば意味が判るかと思います。

[ メッセージ編集済み 編集者: 一郎 編集日時 2003-12-25 18:22 ]
takk
会議室デビュー日: 2003/12/25
投稿数: 4
お住まい・勤務地: シアワセ町
投稿日時: 2003-12-25 18:33
一郎さん返信ありがとうございます。
form1.Show()してみたらすごいことになりました(^^;;
自分の根本的な考え方がちがうのだなぁと思いました。。
では、最初に呼び出されたForm1のtextBoxはどうやって呼び出すのがベストなのでしょうか?
というか呼び出すのがベストなのかな?別なやり方ありましたらぜひ教えていただきたいのですが。。
  よろしくお願いいたします。m(__)m
takk
会議室デビュー日: 2003/12/25
投稿数: 4
お住まい・勤務地: シアワセ町
投稿日時: 2003-12-25 19:04
あっと間に合った♪自己レスです。
 おかげさまで出来ました。
本当にありがとうございました。m(__)m
  これからもよろしくお願いします。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2003-12-25 19:20
「座標を表示する」というのがどういう意味でどういう位置付けなのかによって、最も美しい実装の仕方は変わると思います。

実装できたようですが、気が付いたところを一つ。
それはForm1_Load()内で生成したForm2型のインスタンスへの参照が、Form1_Load()を実行し終えた時点で失われるということです。
Form1_Load()内で定義した変数form2はForm1_Load()を実行し終えた時点でなくなってしまうため、それ以降は、そこで生成したForm2型のインスタンスへアクセスすることはできなくなってしまいます。
わざとなら良いんですが・・・。

キーワードは「スコープ」あるいは「有効範囲」です。

-------------
それから、解決した場合はその方法(ソースを全て貼り付けろということではなくて、エッセンスの部分)を書いておくと、このスレッドが有用な情報の蓄積の一部になります。

[ メッセージ編集済み 編集者: 一郎 編集日時 2003-12-25 19:31 ]
takk
会議室デビュー日: 2003/12/25
投稿数: 4
お住まい・勤務地: シアワセ町
投稿日時: 2003-12-25 20:31
先程はありがとうございましたm(__)m
ここや他の掲示板見て回って似たようなのあったのですがずっと悩んでました。
解決したのはForm1_Loadで
form2.Owner = this;
Form2で
Form1 form1 = (Form1)this.Owner;
ですよね。他の書き込みで見てたのを覚えてたので親画面で気が付きました。
自分で考えるのって大切ですし、間をもっていただいてありがとうございました。
 キーワードありがとうございます。
public変数ですよね?
これからもよろしくお願いいたします。ありがとうございました。
出来てすごくうれしいです(^^
1

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