.net 使用C在visual studio中的3个windows窗体之间传递数据#
我有一个windows应用程序,它有3个表单:Form1、2、3。我想将文本框的文本从.net 使用C在visual studio中的3个windows窗体之间传递数据#,.net,winforms,.net,Winforms,我有一个windows应用程序,它有3个表单:Form1、2、3。我想将文本框的文本从form2发送到form1,然后将相同的文本从form1发送到form3,即 来自FORM2-->FORM1-->FORM3 表单1,有两个按钮,openform2,openform3 Form2有一个文本框Form2\u textbox和一个按钮send\u to\u form1\u按钮 表单3有一个从表单1接收的文本框 现在, 单击form1上的按钮openform2,Form2打开 在form2的t
form2
发送到form1
,然后将相同的文本从form1
发送到form3
,即
来自FORM2
-->FORM1
-->FORM3
- 表单1,有两个按钮,openform2,openform3李>
- Form2有一个文本框Form2\u textbox和一个按钮send\u to\u form1\u按钮
- 表单3有一个从表单1接收的文本框
- 单击
上的按钮form1
,openform2
打开Form2
- 在
的textboxform2
中输入字符串form2\u textbox
- 单击此表单的按钮
时,我希望form2\u按钮
接收此字符串值并将其存储在字符串Form1
中receivefromform2
- 然后在
的form3
form3\u文本框中显示该字符串值
发生此错误的原因是,在创建对象期间,我在
form2
中为form1
提供了参数。
那我该怎么办?是否有其他方法来执行此操作,或者如何删除此错误
当我在方法中包含
f3.Show()
时,方法\u Receive\u From\u Form2没有错误。但是这使得form3
自动加载,而无需单击任何按钮。但是我想通过单击form1
上的按钮打开form3
。然后在文本框中显示值。为form3创建非参数化构造函数,如form2:
public Form3()
{
初始化组件();
}
这通常用于在表单和/或委托中创建抽象方法,以更新文本框并在表单之间共享数据。或者创建一些数据持有者。为form3创建非参数化构造函数,如form2:
public Form3()
{
初始化组件();
}
这通常用于在表单和/或委托中创建抽象方法,以更新文本框并在表单之间共享数据。或者创建一些数据保持器。该错误被抛出,因为Form3不再具有默认构造函数,因为您使用
字符串定义了一个参数。您需要像这样创建一个默认构造函数public Form3(){}
但是你可以处理你两个人的事情,而不是把事情搞得一团糟。例如,如果Form1是主要形式,那么可以这样做:
表格一
public string textFromForm2 = string.Empty;
private void openform3_Click(object sender, EventArgs e)
{
Form3 f3 = new Form3();
f3.Controls["received_from_form1_textbox"].Text = textFromForm2 ;
f3.Show();
}
private void OPENFORM2_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
//I am binding the event to a handler which will save text
//you should check for null for f2.Controls returned any thing or not, i am leaving it for now
f2.Controls["send_to_form1_button"].Click += (s,e)=>{
txtFromForm2 = f2.Controls["form2_textbox"].Text;
};
f2.Show();
}
更新
如果不想使用Lambadas,请像这样绑定事件:
Form2 f2;
首先,您需要引用Form2,因此在类中声明如下:
Form2 f2;
然后绑定事件(代替我之前给出的lambada)
然后在Form1类中的某个地方:
protected void click_handler(object sender, EventArgs e)
{
if(f2 != null)
txtFromForm2 = f2.Controls["form2_textbox"].Text;
}
对于Form3也是如此。会抛出该错误,因为Form3不再具有默认构造函数,因为您使用字符串定义了一个参数。您需要像这样创建一个默认构造函数public Form3(){}
但是你可以处理你两个人的事情,而不是把事情搞得一团糟。例如,如果Form1是主要形式,那么可以这样做:
表格一
public string textFromForm2 = string.Empty;
private void openform3_Click(object sender, EventArgs e)
{
Form3 f3 = new Form3();
f3.Controls["received_from_form1_textbox"].Text = textFromForm2 ;
f3.Show();
}
private void OPENFORM2_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
//I am binding the event to a handler which will save text
//you should check for null for f2.Controls returned any thing or not, i am leaving it for now
f2.Controls["send_to_form1_button"].Click += (s,e)=>{
txtFromForm2 = f2.Controls["form2_textbox"].Text;
};
f2.Show();
}
更新
如果不想使用Lambadas,请像这样绑定事件:
Form2 f2;
首先,您需要引用Form2,因此在类中声明如下:
Form2 f2;
然后绑定事件(代替我之前给出的lambada)
然后在Form1类中的某个地方:
protected void click_handler(object sender, EventArgs e)
{
if(f2 != null)
txtFromForm2 = f2.Controls["form2_textbox"].Text;
}
类似于Form3。在Form3.cs中创建一个参数类型为string的构造函数
public Form3()
{
InitializeComponent();
}
public Form3(string text):this()
{
this.txtName.text=text;
}
在Form3.cs中创建一个参数类型为string的构造函数
public Form3()
{
InitializeComponent();
}
public Form3(string text):this()
{
this.txtName.text=text;
}
我建议从使用构造函数改为使用属性。这将使事情得到适当的“控制”,而且非常简单
例:
然后在表格1中:
public partial class Form1 : Form
{
string receivefromForm2a;
public Form1()
{ InitializeComponent(); }
private void openform3_Click(object sender, EventArgs e)
{
Form3 f3 = new Form3();
f3.form1Text = receivefromForm2a;
f3.Show();
}
private void OPENFORM2_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
if(f2.ShowDialog() == DialogResult.Ok)
{
receivefromForm2a = f2.form2Text; //New Property on Form2.
}
}
}
我建议从使用构造函数改为使用属性。这将使事情得到适当的“控制”,而且非常简单
例:
然后在表格1中:
public partial class Form1 : Form
{
string receivefromForm2a;
public Form1()
{ InitializeComponent(); }
private void openform3_Click(object sender, EventArgs e)
{
Form3 f3 = new Form3();
f3.form1Text = receivefromForm2a;
f3.Show();
}
private void OPENFORM2_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
if(f2.ShowDialog() == DialogResult.Ok)
{
receivefromForm2a = f2.form2Text; //New Property on Form2.
}
}
}
请解释一下,并告诉我应该从现有代码中删除哪些代码?它不起作用,先生?请解释一下,并告诉我应该从现有代码中删除哪些代码?它不起作用了,先生?@Shekhar_Pro:亲爱的先生,你能给我解释一下绑定事件代码的过程吗,我不知道里面发生了什么?我在代码中复制了它,但它给出的语法错误?我使用Lambda和匿名委托绑定事件。。如果您使用的是.NET2.0(不支持它们),那么您可以执行我在我的update@Shekhar_Pro:先生,我的问题还没有解决,请告诉我你给我的代码放在哪里,我完全搞不清楚,我无法实现将文本框文本从Form2发送到Form1,然后从Form1发送到form3的简单过程,Form1是主父窗体。请将此代码放入Form1。如果你还有问题。。给我们您的全部代码,我们将看到并告诉您要修改的内容。。@Shekhar_Pro:先生,我已经在我的问题中粘贴了上面的代码。我是否也必须在这方面做出改变?@Shekhar_Pro:亲爱的先生,你能给我解释一下绑定事件代码的方法吗,我不知道里面发生了什么?我在代码中复制了它,但它给出的语法错误?我使用Lambda和匿名委托绑定事件。。如果您使用的是.NET2.0(不支持它们),那么您可以执行我在我的update@Shekhar_Pro:先生,我的问题还没有解决,请告诉我你给我的代码放在哪里,我完全搞不清楚,我无法实现将文本框文本从Form2发送到Form1,然后从Form1发送到form3的简单过程,Form1是主父窗体。请将此代码放入Form1。如果你还有问题。。给我们你的wh
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
string loginname = form2_textbox.Text;
}
public String form2Text {get; set;}
private void send_to_form1_button_Click(object sender, EventArgs e)
{
form2Text = form2_textbox.Text;
this.DialogResult = DialogResult.Ok;
this.Close();
}
}
public partial class Form1 : Form
{
string receivefromForm2a;
public Form1()
{ InitializeComponent(); }
private void openform3_Click(object sender, EventArgs e)
{
Form3 f3 = new Form3();
f3.form1Text = receivefromForm2a;
f3.Show();
}
private void OPENFORM2_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
if(f2.ShowDialog() == DialogResult.Ok)
{
receivefromForm2a = f2.form2Text; //New Property on Form2.
}
}
}