1

C# 文本框发送文本值。情况,我有2个表格。表格 1 和表格 2。Form1 有一个文本框,form2 有一个文本框和一个按钮,我将在 form2 文本框上放置一个文本值,当我单击 form2 按钮时,将发送 form2 文本框的值并更改 form1 文本框的值...。需要帮助。 .

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

Form1 没有代码,只有 textbox1

这是form2按钮中的代码

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



}

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

4

7 回答 7

2

假设您创建Form2Form1(from inside 的子级Form1,执行类似的操作Form2 from = new Form2();,您可以从父级内部访问子表单的任何公共属性。因此,只需确保将 to 的可访问性设置TextBoxpublic,并执行以下操作:

var form = new Form2();
form.ShowDialog();
this.TextBox1.Text = form.TextBox1.Text;
于 2012-11-20T01:25:27.047 回答
1

您可以将 Form1 中的文本框声明为公开的,然后您可以通过以下方式从 form2 访问它form1.textBoxName.propertyName

于 2012-11-20T01:18:32.843 回答
1

您可以为此使用事件:

定义一个接口:

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

因此,当您创建 Form2 时,您需要传递 Form1 的实例:

Form2 f = new Form2(form1);

按下按钮后,第二个表单上的文本框将自动获取值。

PS:更多信息请看活动教程

于 2012-11-20T01:22:12.460 回答
0

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

表格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; }
        }
    }
}
于 2012-11-20T01:30:25.820 回答
0

您可以使用 .Tag 属性(在这里看我的问题 ,简单的方法是这样的:您说 form2 中的 textBox.text 将替换 form1 中的 texBox.text 对吗?在 form2 中执行此操作

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

然后在加载 form1 时写下这个

string myText = (string)this.Tag;
   this.textbox1.text = myText;
于 2012-11-21T03:04:25.273 回答
0

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

form1 frm1 = new form();

因此,要更新屏幕上的 form1,您需要将其实例注入到 form2 中。例如,当您显示 form2 时,您设置了。

form2.Form1 = currentForm1Instance;

希望这可以帮助。

于 2014-02-13T10:12:10.900 回答
-1

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

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

在 Visual C# 中将文本框文本传递给另一个窗体

于 2014-02-13T10:04:18.313 回答