2012-04-30 16 views
0

私は2つのフォームを持っています。 Form2には、テキストボックスとボタンがあります。ボタンを押すと、テキストボックスのテキストをForm1のテキストボックスに追加します。別のフォームのテキストボックスにテキストを追加しますか?

Form2の場合:

private void button1_Click(object sender, EventArgs e) 
{ 
    frm1.AppendTxt(textBox1.Text); 
    this.Close(); 
} 

Form1オン:何らかの理由で

public void AppendTxt(string text) 
{ 
    this.body.AppendText(text); 
    MessageBox.Show(body.Text); 
} 

は、テキストが Form1上のテキストボックスに表示されないここに私のコードです。ただし、表示されるメッセージボックスには、 Form2に入力したテキストが表示されます。

答えて

0

あなたはForm1の隠されたコピーではなく、画面上に表示されますインスタンス内のテキストボックスを変更しているbody.Text += " " + text;

+0

にテキストを入力してください1仕事はありません。 –

+0

var frm = Application.OpenForms ["Form1"] ??新しいForm1(); frm.body.Text + = "" + text; –

+0

@rcarter: 'frm'は間違った静的型を持ちます。メンバー' body'の検索が失敗します。 –

0

たぶん試してみてください。

Form2のコンストラクタに Form1ハンドルを渡し、イベントハンドラ内で使用するために(も フィールドと呼ばれる)クラスのメンバ変数に保存してください。

0

は、私はあなたがそれはあなたのフォームクラスの一部として公開されますので、あなたのテキストボックスのためのゲッターとセッターを作成するために持っていると思うと、フォームオブジェクト 最初forn

public string sometext 
    { 
     get { return sometext.Text; } 
     set { sometext.Text = value; } 
    } 

第二の形式

としてそれにアクセスすることができますここで
Form1 form= new Form1(); 
form.sometext = "some name"; 

は、別の短いiはForm1ので を発見した溶液開始形態2

Form2 form2 = new Form2(); 
form2.Owner = (Form)this; 
form2.Show(); 
あります3210

とのForm2の

フォームからフォームに値を渡す
this.Owner.Controls.Find("TextBox1",true).First().Text="Hi!!!!" 
+0

テキストボックスとプロパティの間の名前の衝突は別として、これはすでに存在する 'Form1'のインスタンスへのアクセスを助けるものではなく、新しい(隠された)インスタンスを作成します。 –

0

インチ

これを試すことができます。最初にすべてのあなたのフォームはこの1つのよう にアクセスできる変数を宣言することができ、

string yourValue; 

PS:Form1のからクラスという

を宣言し、そのクラスに値を渡すことができます。このような は、

YourClass.yourValue = textbox1.text; 

値を持っています。あなたの2番目のフォームに渡してください。

textbox2.text = YourClass.yourValue; 

希望します。 :D

+0

jQueryのように見えますか?この質問は 'javascript'ではなく' c# 'とタグ付けされています。これは、イベントハンドラの署名と 'MessageBox'の使用に基づいて、ASPではなくWinFormsです。 –

+0

申し訳ありません私の悪い!私はそれを編集します。 – Roy

0

フォームには、form1とform2という2つのフォームがあります。 2つのフォームが開きます。 form2には、1つのテキストボックス(txt2)と1つのボタン(btn2)があります。 form1には1つのテキストボックス(txt1)があります。ユーザーがtxt2に何かを入力してbtn2をクリックすると、txt2のテキストがtxt1に追加されます。これはあなたが欲しいものですか?

はい場合:

// Declare a delegate 
public delegate void GetValue(string value); 
// Declare event with delegate 
public event GetValue btn2_Clicked; 

その後、Form2の中で、あなたがそのイベントを処理する関数を作成します: のForm2で、あなたは、デリゲートを作成する必要がある関数の名前は、イベントの名前と同じです、あなただけの宣言して接頭辞 "On"を追加します。このように:その後

public void Onbtn2_Clicked(string value) 
{ 
    if (btn2_Clicked != null) 
    { 
     btn2_Clicked(value); 
    } 
} 

、BTN2クリックイベントでは、あなたのイベントを作成したばかりの上昇:

private void btn2_Click(object sender, EventArgs e) 
{ 
    Onbtn2_Clicked(txt2.Text); 
} 

[OK]を、それはForm2の中で行われています。終了するのカムバックをForm1: 私は、ユーザーがそうBTN1クリックイベントでは、Form1に(BTN1)ボタンをクリックしたときのForm2が開かれたと仮定します。

private void btn1_Click(object sender, EventArgs e) 
{ 
    // Create form2 
    Form2 frm2 = new Form2(); 
    // Handle btn2 click 
    frm2.btn2_Clicked += new Form2.GetValue(frm2_btn2_Clicked); 
    // Show form2 
    frm2.Show(); 

} 

void frm2_btn2_Clicked(string value) 
{ 
    // When btn2 is clicked, the text in txt2 will be assign to txt1 
    txt1.Text = value;     
} 

とテキストがForm1の

どう
0

にTXT1に割り当てるされますForm2.designer.csのtxtBoxをプライベートからパブリックに変更するだけですか?

private System.Windows.Forms.TextBox textBox1; 

public System.Windows.Forms.TextBox textBox1; 

この方法で、あなただけのForm2でこのようにそれを送信することができた:

Form1 frm1 = new Form1(); 

private void button1_Click (object sender, EventArgs e) 
frm1.textBox1.AppendText(textBox2); 

TextBox2をされてあなたはdidnのForm2の

関連する問題