【发布时间】:2011-02-23 07:45:05
【问题描述】:
我在 c# 中的 2 个窗口窗体之间传递数据。 Form1 是主窗体,其文本框将接收从 form2_textbox 传递给它的文本并显示在其文本框(form1_textbox)中。
首先,form1 打开,带有一个空文本框和一个按钮,单击 form1_button 时,form2 打开。 在Form2中,我在form2_textbox中输入了一个文本,然后单击了按钮(form2_button)。此按钮的ON单击事件,它将文本发送到form1的文本框,form1将以其空的form1_textbox与从form2接收的文本成为焦点。
我正在使用属性来实现这个任务。 FORM2.CS
public partial class Form2 : Form
{
//declare event in form 2
public event EventHandler SomeTextInSomeFormChanged;
public Form2()
{
InitializeComponent();
}
public string get_text_for_Form1
{
get { return form2_textBox1.Text; }
}
//On the button click event of form2, the text from form2 will be send to form1:
public void button1_Click(object sender, EventArgs e)
{
Form1 f1 = new Form1();
f1.set_text_in_Form1 = get_text_for_Form1;
//if subscribers exists
if(SomeTextInSomeFormChanged != null)
{
SomeTextInSomeFormChanged(this, null);
}
}
}
FORM1.CS
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public string set_text_in_Form1
{
set { form1_textBox1.Text = value; }
}
private void form1_button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.Show();
f2.SomeTextInSomeFormChanged +=new EventHandler(f2_SomeTextInSomeFormChanged);
}
//in form 1 subcribe to event
Form2 form2 = new Form2();
public void f2_SomeTextInSomeFormChanged(object sender, EventArgs e)
{
this.Focus();
}
}
& form1 成为焦点,其文本框包含从 Form2 接收到的文本。
【问题讨论】:
-
@sqlchild,不要这样,使用事件和委托,这是正确的做法,不要通过表单暴露属性
-
您已经发布过一次这个问题。如果您想添加更多信息而不是发布新信息,请编辑您的原始问题。
-
你的编码风格非常非常丑陋。如果你认为有人会使用你的代码,你必须遵守常见的 .net 编码约定msdn.microsoft.com/en-us/library/ms229045.aspx。
-
@gov,使用属性有什么危害?