如何将文本从一个表单同步到另一个表单?



英语不是我的母语,所以请耐心等待。

我的问题的意思是,如何使表单(例如form 2(显示从form 1键入的内容,就像实时一样。我假设 将使用TextChanged事件,但下一步是什么?

为了保持简单和OOP友好,我会在Form2中创建一个属性,并在Form1.TextChanged事件中更新它:

表单1.cs

public partial class Form1 : Form
{
    private Form2 _form2;
    public Form1()
    {
        InitializeComponent();
        this.textBox1.TextChanged += (sender, e) => 
        { 
            _form2.TextBoxValue = textBox1.Text; 
        };
        _form2 = new Form2();
        _form2.Show();
    }
}

表格2.cs

public partial class Form2 : Form
{
    public string TextBoxValue
    {
        get => textBox1.Text;
        set => textBox1.Text = value;
    }
    public Form2()
    {
        InitializeComponent();
    }
}

请注意,您需要将Form1Form2名称更改为应用程序中的实际表单类名称(以及textBox1名称(。

编辑: 按照注释中的要求,如果要在两个窗体中更新对任一文本框的更改,则需要将 TextBoxValue 属性添加到两个窗体中,并使两个窗体中的事件处理程序更改该属性。我还清理了一点代码。

表单1.cs

public partial class Form1 : Form
{
    private Form2 _form2;
    public string TextBoxValue
    {
        get => textBox1.Text;
        set => textBox1.Text = value;
    }
    public Form1()
    {
        InitializeComponent();
        this.textBox1.TextChanged += (sender, e) => 
        { 
            _form2.TextBoxValue = textBox1.Text; 
        };
        _form2 = new Form2();
        _form2.Show();
    }
}

表格2.cs

public partial class Form2 : Form
{
    private Form1 _form1;
    public string TextBoxValue
    {
        get => textBox1.Text;
        set => textBox1.Text = value;
    }
    public Form2()
    {
        InitializeComponent();
        this.textBox1.TextChanged += (sender, e) => 
        { 
            _form1.TextBoxValue = textBox1.Text; 
        };
        this.Shown += (sender, e) => 
        { 
            _form1 = (Form1)Application.OpenForms["Form1"]; 
        };
    }
}

在 form2 上抛出一个事件并从 form1 调用它

在表单 1 上:

private Form2 frm2;
public Form1()
    {
        InitializeComponent();
    }
    private void button1_Click(object sender, EventArgs e)
    {
        var text = Textbox1.Text;
        frm2.TextChanged.Invoke(text , new EventArgs());
    }
    private void Form1_Load(object sender, EventArgs e)
    {
        frm2 = new Form2();
       frm2.Show();
    }

在表格 2 上:

        public EventHandler TextChanged;
 public Form2()
    {
        InitializeComponent();
        TextChanged += HandleTextChanged;
    }

    private void HandleTextChanged(object sender, EventArgs e)
    {
        label1.Text = (string) sender;
    }    

我宁愿不让这两种形式相互了解。 您可以改为执行以下操作:

static class Program
{
  private static Form _form1;
  private static Form _form2;
  public static void Main()
  {
     _form1 = new MyForm();
     _form2 = new MyForm();
     _form1.MyTextbox.OnTextChanged += Form1_MyTextBox_TextChanged;
  }
  private void Form1_MyTextBox_TextChanged(object sender, EventArgs e)
  {
       _form2.MyTextBox.Text = _form1.MyTextbox.Text;
  }
  }
}
public class MyForm : Form 
{
  public TextBox MyTextBox {get;set;}
}

相关内容

最新更新