Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 使用C在visual studio中的3个windows窗体之间传递数据#_.net_Winforms - Fatal编程技术网

.net 使用C在visual studio中的3个windows窗体之间传递数据#

.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

我有一个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
    的textbox
    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.
    }
}
}