【问题标题】:C# need help to pass text value to other form textboxC# 需要帮助将文本值传递给其他表单文本框
【发布时间】:2012-11-08 01:05:14
【问题描述】:

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 中没有任何变化

【问题讨论】:

  • 您是如何打开每个表单的?如果您使用 ShowDialog 从另一个打开一个,您可以引用所有者表单并将其转换为适当的类型(表单 1)并访问文本框(如果其修饰符是 Public)。
  • 请告诉我们你目前在做什么。
  • 是的。另一个问题是 Show() 和 showDialog() 的区别是什么?当我尝试更改 form1 文本框并关闭 form2 时,唯一通过的是值,但我看不到 form1 文本框(物理)中的任何变化。
  • @user974015 ShowDialog 在应用程序模态状态下打开表单,这意味着在子表单完成之前您无法对父表单执行任何操作。 Show 只是打开另一个表单,您可以同时使用它们。
  • 您可能已经注意到以下所有答案都是完全猜测。这是因为您尚未向我们展示您到目前为止所做的事情,因此我们无法理解您的问题发生的背景。如果您“正确地传递了值,但 UI 根本没有改变”,那么您很可能是在实例化一个新表单而不是使用现有表单。在这种情况下,您没有“正确传递值”。

标签: c# winforms


【解决方案1】:

假设您将Form2 创建为Form1 的子级(从Form1 内部执行Form2 from = new Form2(); 之类的操作,您可以从父级内部访问子窗体的任何公共属性。所以,只要确保将TextBox 的可访问性设置为public,并执行以下操作:

var form = new Form2();
form.ShowDialog();
this.TextBox1.Text = form.TextBox1.Text;

【讨论】:

    【解决方案2】:

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

    【讨论】:

    【解决方案3】:

    您可以为此使用事件:

    定义一个接口:

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

    只要按下按钮,第二个表单上的文本框就会自动获取值。

    P.S.:欲了解更多信息,请参阅Events Tutorial

    【讨论】:

      【解决方案4】:

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

      Form1

      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

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

      【讨论】:

      • @user974015 那么您需要向我们展示您的代码,我发布的代码确实有效,它将从 form2 传输文本并更新 form1 的文本框。如果您无法更新您的文本框,那么我们需要查看您使用的方法以便为您提供帮助。
      • 你能用form2解释一下吗..textbox1.text.. RaiseCustomEvent(this, new CustomEventArgs(textBox1.Text));
      • @user974015 我所做的是创建一个自定义事件参数并将其与自定义事件相关联。您询问的代码行引发事件并将文本框的 Text 属性的值分配给自定义 eventarg 然后由于 form1 在创建 frm2 时订阅了该事件,它将处理将您的文本从 CustomEventArgs
      【解决方案5】:

      你可以使用 .Tag 属性(看看我的问题here 简单的方法是这样的: 你说 form2 中的 textBox.text 会替换 form1 中的 texBox.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);
      }
      

      然后在加载表单时写下这个

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

      【讨论】:

        【解决方案6】:

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

        form1 frm1 = new form();
        

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

        form2.Form1 = currentForm1Instance;

        希望这会有所帮助。

        【讨论】:

          【解决方案7】:

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

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

          Passing Textbox Text to another form in Visual C#

          【讨论】:

          • 只发布另一个资源的链接在大多数情况下很难回答问题。请提取代码中最重要的部分,说明您对问题的解决方案。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-03-27
          • 2016-04-29
          • 2013-10-31
          • 2017-08-14
          • 1970-01-01
          • 2012-01-02
          相关资源
          最近更新 更多