C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: Formのインスタンスと表示について


(過去ログ 88 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■52622 / inTopicNo.1)  Formのインスタンスと表示について
  
□投稿者/ kaori (1回)-(2010/08/18(Wed) 15:26:56)

分類:[C#] 

VC#を初めて間もない、青二才ですが教えて頂けますようにお願い致します。
初歩的質問で申し訳ございませんorz

【準備】
@Form1とForm2を用意
AForm1には下の2つのコントロールを配置
 ・textBox1
 ・button1
BForm2には下のコントロールを1つ配置
 ・button1
【それぞれのプログラム内容】
@Main
    static class Program
    {
        [STAThread]
        static void Main()
        {
            Form1 FromClsMaintoFM1Open = new Form1();
            FromClsMaintoFM1Open.ShowDialog();
        }
    }
AForm1
    private void button1_Click(object sender, EventArgs e)
    {
        this.Visible = false;
        Form2 fromFM1toFM2open = new Form2();
        fromFM1toFM2open.ShowDialog();
    }
BForm2
    private void button1_Click(object sender, EventArgs e)
    {
        this.Visible = false;
        Form1 fromFM2toFM1open = new Form1();
        fromFM2toFM1open.ShowDialog();
    }
【操作手順】
@プログラムを起動するとForm1が表示
AForm1のtextBox1に適当な文字を入力(この場合仮に「テキスト文字」とする)
BForm1のbutton1を押すと
 ・Form1が非表示
 ・Form2が表示される
CForm2のbutton1を押すと
 ・Form2が非表示
 ・Form1が表示される
【質問事項】
操作手順CでForm1を再表示されたとき、操作手順AでtextBox1に入力した
「テキスト文字」と言う文字列が消えてしまっています。
これは、操作手順@で表示したForm1と、操作手順Cで表示したForm1が
それぞれ別のインスタンスで作られたForm1だからと言うところまでは
分かるのですが(違うのかな?)、操作手順CでForm2のbutton1を
押したときに操作手順@のForm1を再表示するにはどうしたらよいのでしょうか?


引用返信 編集キー/
■52624 / inTopicNo.2)  Re[1]: Formのインスタンスと表示について
□投稿者/ あぴす (12回)-(2010/08/18(Wed) 16:00:47)
現状では、別のインスタンスなので、同じForm1ですが新しくForm1を作っていますね。

下記のようにすればよいのでは?

-------------------------
AForm1
    private void button1_Click(object sender, EventArgs e)
    {
        this.Visible = false;
        Form2 fromFM1toFM2open = new Form2();
        fromFM1toFM2open.ShowDialog();
        this.visible = true;                    <-- 追加
    }
BForm2
    private void button1_Click(object sender, EventArgs e)
    {
        this.close();                           <-- 書き換え
    }

引用返信 編集キー/
■52625 / inTopicNo.3)  Re[2]: Formのインスタンスと表示について
□投稿者/ マサヤ (100回)-(2010/08/18(Wed) 16:07:56)
Form2を開くときにインスタンスを引数で渡してあげて、
Form2にてインスタンスのVisibleをtrueにしたらいかがでしょうか?

AForm1
private void button1_Click(object sender, EventArgs e)
{
this.Visible = false;
Form2 fromFM1toFM2open = new Form2();
fromFM1toFM2open.ShowDialog(this);
}
BForm2
private void button1_Click(object sender, EventArgs e)
{
this.Visible = false;
((Form1)this.Owner).Visible = true;
}



引用返信 編集キー/
■52631 / inTopicNo.4)  Re[3]: Formのインスタンスと表示について
□投稿者/ kaori (2回)-(2010/08/18(Wed) 17:30:57)
あぴすさん、マサヤさん、早速の対応ありがとうございました。
どちら様のやり方も実行し、私が期待していた動作(表示)が出来ました。
ありがとうございました。

実は、も〜1つ分からない事がありまして、っと言うのは、

Form2にもtextBox1が配置されてたとします。

操作手順B後のForm2が表示された時に、Form2のtextBox1に文字列を入力し、
Form2のbutton1を押して、ご両者様に教えて頂いたForm1を表示する際に
Form2のtextBox1に入力した文字列をForm1のtextBox1に表示するには
どうしたらよいのでしょうか?

Public的なグローバル変数を用いれば簡単なのですが、Form2のtextBox1の文字列を
引数としてForm1に渡たすにはどうすれば良いのでしょうか?
引用返信 編集キー/
■52634 / inTopicNo.5)  Re[4]: Formのインスタンスと表示について
□投稿者/ マサヤ (104回)-(2010/08/18(Wed) 18:00:08)
私はパブリック変数かパブリックプロパティしか知りません。
もしくはForm1を引数つきで呼び出すか。
Webなら簡単ですが。
引用返信 編集キー/
■52650 / inTopicNo.6)  Re[5]: Formのインスタンスと表示について
□投稿者/ kaori (3回)-(2010/08/19(Thu) 06:04:01)
No52634 (マサヤ さん) に返信

おはようございます。
回答ありがとうございました。
> 私はパブリック変数かパブリックプロパティしか知りません。

そ〜なんですか(ノ_`) 

結局、下の記述で対処しました。

BForm2
private void button1_Click(object sender, EventArgs e)
{
  this.Visible = false;
  ((Form1)this.Owner).textBox1.Text = this.textBox1.Text;
  ((Form1)this.Owner).Visible = true;
}

『((Form1)this.Owner).***』で、別のフォームのメンバを触れることを
知り、有意義な時間を過ごすことができました。
ほんと、ありがとうございましたorz

解決済み
引用返信 編集キー/
■52658 / inTopicNo.7)  Re[6]: Formのインスタンスと表示について
□投稿者/ あぴす (13回)-(2010/08/19(Thu) 09:45:48)
私なら以下のようにします。

@Form2にTextBox1の値を返すメソッドを用意。

public string GetTextBoxText()
{
   return this.textBox1.Text;
}

AFrom2の値を取得したいタイミングで上記の関数を呼び出す

Form1
private void button1_Click(object sender, EventArgs e)
{
   this.Visible = false;
   Form2 fromFM1toFM2open = new Form2();
   fromFM1toFM2open.ShowDialog();
   this.textBox1.Text = fromFM1toFM2open.GetTextBoxText();   <-- ここで呼び出す
   this.visible = true;
}

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -