2012-04-30 2 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

Попробуйте body.Text += " " + text;

+0

Это Бесполезный Не работай. –

+0

var frm = Application.OpenForms ["Form1"] ?? новый Form1(); frm.body.Text + = "" + текст; –

+0

@rcarter: 'frm' будет иметь неправильный статический тип, поиск элемента' body' не удастся. –

0

Скорее всего вы изменяете текстовое поле внутри скрытой копии Form1, а не экземпляр, который отображается на экране.

Попробуйте пропусканием Form1 ручку конструктору Form2 «s, и сохранить его в переменной-члена класса (также называемый поле) для использования внутри обработчика событий.

0

Я думаю, что вы должны создать методы получения и установки для вашего текстового поля, так что будет разоблачен как часть вашего класса формы, и вы можете получить доступ к нему в качестве объекта формы первого Forn

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

второй форма

Form1 form= new Form1(); 
form.sometext = "some name"; 

здесь еще один короткий решение я нашел В Form1 инициируют форма 2

Form2 form2 = new Form2(); 
form2.Owner = (Form)this; 
form2.Show(); 

и

this.Owner.Controls.Find("TextBox1",true).First().Text="Hi!!!!" 
+0

Помимо столкновения имен между текстовым полем и свойством это не помогает получить доступ к экземпляру 'Form1', который уже существует, он создает новый (скрытый) экземпляр. –

0

Попутных значений Form2 от формы к форме.

Вы можете попробовать это. первых вы можете объявить переменную, что все ваши формы могут получить доступ к как этот,

string yourValue; 

PS: объявить, что ваш класс

С Form1, вы можете передать значение этого класса. как это,

YourClass.yourValue = textbox1.text; 

После того, имеют значение. передайте его во вторую форму.

textbox2.text = YourClass.yourValue; 

Надеюсь, это поможет вам. : D

+0

Это похоже на jQuery? Этот вопрос помечен как 'C#', а не 'javascript'. Довольно уверен, что это WinForms, а не ASP, на основе сигнатуры обработчика события и использования MessageBox. –

+0

извините, мой плохой! Я отредактирую его. – Roy

0

У вас есть две формы: форма1 и форма2. Открывается две формы. В form2 у вас есть одно текстовое поле (txt2) и одна кнопка (btn2). В form1 у вас есть одно текстовое поле (txt1). Когда пользователь вводит что-то на txt2 и нажимает btn2, текст в txt2 будет добавлен в txt1. Это то, что вы хотите?

Если да: В form2, вы должны создать делегат:

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

Затем в form2, вы создаете функцию для обработки этого события: Имя функции является то же самое с именем события вы просто объявить и добавить в него префикс «Вкл». Как это:

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); 
} 

Хорошо, что делается в form2. Comeback form1 закончить: Я предполагаю, что form2 открывается, когда пользователь нажимает кнопку (btn1) в Form1, поэтому в btn1 клик событие:

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;     
} 

И текст будет присвоенным txt1 в form1

0

Как о простое изменение txtBox в Form2.designer.cs от частного к публичному?

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 быть один, где вы вводите текст в Form2

Смежные вопросы