一个人如何将文本从一种形式同步到另一种形式?

时间:2018-08-07 12:33:39

标签: c# winforms

英语不是我的母语,所以请多多包涵。

我的问题是要使一个表单(例如form 2)如何实时显示form 1中正在键入的内容。我认为 TextChanged事件将被使用,但是下一步是什么?

3 个答案:

答案 0 :(得分:0)

在form2上引发一个事件,然后从form1调用它

在Form1上:

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

以及在form2上

        public EventHandler TextChanged;

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


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

    }    

答案 1 :(得分:0)

我不想让两种形式互相认识。 您可以改为执行以下操作:

find/replace

答案 2 :(得分:0)

为使其简单且易于操作,我将在Form2中创建一个属性,并在Form1.TextChanged事件中对其进行更新:

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

Form2.cs

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

    public Form2()
    {
        InitializeComponent();
    }
}

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

修改: 根据注释中的要求,如果要在两个表单中更新任一文本框的更改,则需要向两个表单添加TextBoxValue属性,并使两个表单中的事件处理程序都可以更改该属性。我还整理了一下代码。

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

Form2.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"]; 
        };
    }
}