C#需要帮助将文本值传递给其他表单文本框

C#需要帮助将文本值传递给其他表单文本框,c#,winforms,C#,Winforms,C#文本框发送文本值。我有两张表格。表格1和表格2。Form1有一个textbox,form2有一个textbox和一个按钮,我会在form2 textbox上放置一个文本值,当我单击form2按钮时,会发送form2 textbox的值并更改Form1 textbox的值…需要帮助 这就是我所做的我只想总结一下 表单1没有代码,只有文本框1 namespace WindowsFormsApplication1 { public partial class Form1 : Form

C#文本框发送文本值。我有两张表格。表格1和表格2。Form1有一个textbox,form2有一个textbox和一个按钮,我会在form2 textbox上放置一个文本值,当我单击form2按钮时,会发送form2 textbox的值并更改Form1 textbox的值…需要帮助

这就是我所做的我只想总结一下

表单1没有代码,只有文本框1

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            Form2 frm2 = new Form2();
            frm2.RaiseCustomEvent+=new CustomEventHandler(frm2_RaiseCustomEvent);
            frm2.Show(this);
        }

        void frm2_RaiseCustomEvent(object sender, CustomEventArgs a)
        {
            textBox1.Text = a.Message;
        }
    }
}
这是form2按钮中的代码

  private void change_Click(object sender, EventArgs e)
        {
         form1 frm1 = new form();
         string test = textbox2.text
         frm1.textbox.text = test;



}

我尝试弹出一些消息框来检查值是否通过…到目前为止,值确实通过了,但UI中没有任何更改

您可以将Form1中的文本框声明为公共,然后您可以通过进入Form1.textBoxName.propertyName

从form2访问它。您可以使用事件:

定义一个接口:

public interface ITextChange
{
    event EventHandler SomeTextChanged;
}
然后,让您使用按钮实现此界面,并在按钮单击时触发事件,将文本框中的值作为第一个参数传递:

public partial class Form1 : Form, ITextChange
{
    public event EventHandler SomeTextChanged = delegate { };

    public Form1 () {}

    private void button1_Click(object sender, EventArgs e)
    {
        SomeTextChanged(textBox1.Text, null);
    }
}
将此表单的实例传递给第二个表单,如下所示:

public partial class Form2 : Form
{
    public Form2(ITextChange f)
    {
        InitializeComponent();
        f.SomeTextChanged += new EventHandler(f_SomeTextChanged);
    }

    void f_SomeTextChanged(object sender, EventArgs e)
    {
        textBox1.Text = sender.ToString();
    }
}
var form = new Form2();
form.ShowDialog();
this.TextBox1.Text = form.TextBox1.Text;
因此,在创建Form2时,需要传递Form1的实例:

Form2 f = new Form2(form1);
一旦按下按钮,第二个表单上的文本框将自动获取值


备注:有关更多信息,请参见假设您作为
Form1
的子级创建
Form2
(从
Form1
中,执行类似
Form2 from=new Form2()的操作);
,您可以从父窗体中访问子窗体的任何公共属性。因此,只需确保将
文本框的可访问性设置为
公共
,然后执行以下操作:

public partial class Form2 : Form
{
    public Form2(ITextChange f)
    {
        InitializeComponent();
        f.SomeTextChanged += new EventHandler(f_SomeTextChanged);
    }

    void f_SomeTextChanged(object sender, EventArgs e)
    {
        textBox1.Text = sender.ToString();
    }
}
var form = new Form2();
form.ShowDialog();
this.TextBox1.Text = form.TextBox1.Text;

你可以通过公开文本框来了解Form2中的Form1。但在我看来,正确的方法是创建一个自定义事件处理程序,在Form2中订阅它,并将文本作为eventarg传递。代码改编自此

表格1

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            Form2 frm2 = new Form2();
            frm2.RaiseCustomEvent+=new CustomEventHandler(frm2_RaiseCustomEvent);
            frm2.Show(this);
        }

        void frm2_RaiseCustomEvent(object sender, CustomEventArgs a)
        {
            textBox1.Text = a.Message;
        }
    }
}
表格2

namespace WindowsFormsApplication1
{
    public delegate void CustomEventHandler(object sender, CustomEventArgs a);

    public partial class Form2 : Form
    {
        public event CustomEventHandler RaiseCustomEvent;
        public Form2()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            RaiseCustomEvent(this, new CustomEventArgs(textBox1.Text));
        }
    }

    public class CustomEventArgs : EventArgs
    {
        public CustomEventArgs(string s)
        {
            msg = s;
        }
        private string msg;
        public string Message
        {
            get { return msg; }
        }
    }
}

您可以使用.Tag属性(看看我的问题 简单的方法如下: 您说过form2中的textBox.text将取代form1中的textBox.text,对吗? 在表单2中执行此操作

try
{
    private void change_Click(object sender, EventArgs e)
    {
         form2 frm2 = new form();
         frm2.Tag = this.textbox2.text;
         frm2.ShowDialog();
    }
}
catch (Exception ex)
{
   MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
然后在加载表单1时写入此内容

string myText = (string)this.Tag;
   this.textbox1.text = myText;

我也有同样的疑问,所以我在互联网上搜索并找到了一种在C#中的表单之间传递变量值的好方法,这很简单。这没什么,只是在第一个表单中分配一个变量,你可以从任何表单访问该变量。我创建了一个关于“如何将值传递到表单”的视频教程

转到下面的链接以查看视频教程。


您的form1.textbox1未更新的原因是您初始化了form1的新实例

form1 frm1 = new form();
因此,要更新屏幕上的form1,需要将其实例注入form2中

form2.Form1=当前Form1状态


希望这能有所帮助。

您如何打开每个表单?如果您使用ShowDialog从另一个表单打开表单,您可以引用所有者表单并将其转换为适当的类型(表单1),如果其修改器是公共的,则可以访问文本框。请告诉我们您目前正在做什么。是的。另一个问题是Show()和ShowDialog()的区别是什么?当我试图更改form1文本框并关闭form2时,唯一通过的是值,但我看不到form1文本框(物理)中有任何更改@user974015 ShowDialog以应用程序模式状态打开表单,这意味着在子窗体完成之前,您无法对父窗体执行任何操作。Show只打开另一个窗体,您可以同时使用这两个窗体。您可能已经注意到,下面的所有答案都是完全猜测。这是因为您没有向我们展示您所做的操作到目前为止,我们还无法理解问题发生的背景。如果您“正确传递值,但UI根本没有改变”,那么很可能您正在实例化一个新表单,而不是使用现有表单。在这种情况下,您没有“正确传递值”。这些链接可能会有帮助:还有伙计们..我可以正确地传递值…只是UI根本没有改变…公开控件真的是个坏主意..@user974015然后你需要向我们展示你的代码,我发布的代码确实有效,它将从form2传输文本并更新form1的文本框。如果你无法更新你的textbox然后我们需要查看您正在使用的方法以帮助您。您可以用form2..textbox1.text..RaiseCustomEvent(这个,新的CustomEventArgs(textbox1.text))解释一下吗;@user974015我所做的是创建一个自定义事件args并将其与自定义事件关联。您询问的代码行将引发该事件并将Textbox的Text属性的值分配给自定义事件arg,然后,由于form1在创建frm2时已订阅该事件,因此它将处理该事件并将您的文本从f CustomEventArgs仅显示指向其他资源的链接在大多数情况下很难回答问题。请提取代码中最重要的部分,以说明问题的解决方案。