如何通过用户控件将文本从子窗体传递到主窗体?

时间:2015-11-27 15:36:34

标签: c#

我是c#的新手。我在Windows窗体项目中有以下内容:

Form1,带按钮和文本框。

用buttton进行用户控制。

Form2,带按钮和文本框。

Screenshot

如屏幕截图所示:在form1中,我单击“显示用户控件1”弹出用户控件1。然后在User Control1中单击Show Form2 form2弹出。

在Form2中,我在textBox中输入值,当单击“发送到form1中的文本框”时,我希望将此文本插入到Form1的文本框中。

我的问题是:如何通过用户控件1将form2中的文本发送到form1中的文本框? 我只需知道一些要遵循的步骤或一些代码,如果有可能实现这一点。

请帮帮我。谢谢

Form1中:

if(substr( $command , 0, 5 ) === "whois"){
  shell_exec($command );
}

用户控制1:

public partial class Form1 : Form
{

    UserControl1 UC1 = new UserControl1();

    public Form1()
    {
        InitializeComponent();
    }


    private void button1_Click(object sender, EventArgs e)
    {
        Controls.Add(UC1);  //add a userControl
        UC1.Visible = true;
    }
}

窗体2:

public partial class UserControl1 : UserControl
{
    public UserControl1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 frm2 = new Form2();
        frm2.Show();
    }
}

2 个答案:

答案 0 :(得分:1)

将这些行添加到您的代码中:

public partial class Form1 : Form
{
    UserControl1 UC1;
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        if (UC1 == null)
        {
            UC1 = new UserControl1(textBox1);
        }
        Controls.Add(UC1);
        UC1.Visible = true;
    }
}

用户控制:

public partial class UserControl1 : UserControl
{
    TextBox r;
    public UserControl1(TextBox r)
    {
        InitializeComponent();
        this.r = r;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 frm2 = new Form2(r);
        frm2.Show();
    }
}

Form2:

public partial class Form2 : Form
{
    TextBox s;
    public Form2(TextBox s)
    {
        InitializeComponent();
        this.s = s;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        String str = textBox1.Text;
        s.Text = str;
    }
}

答案 1 :(得分:1)

您可以通过触发事件和事件处理程序来完成。

Form2

public delegate void SendTextF2(string YourStringFromTextBox);
public partial class Form2 : Form
{
    public event SendTextF2 UISendTextHandlerF2;
    public Form2(TextBox s)
    {/*unchange*/}

    private void button1_Click(object sender, EventArgs e)
    {
        if(UISendTextHandlerF2!=null)
            UISendTextHandlerF2(textBox1.Text);
    }
}

UserControl1

//New
public delegate void SendTextUC(string YourStringInTextBox);
public partial class UserControl1 : UserControl
{
    //New
    public event SendTextUC UISendTextHandlerUC;
    public UserControl1(TextBox r)
    {
        InitializeComponent();
        this.r = r;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 frm2 = new Form2(r);
        frm2.Show();
        //Add event handler
        frm2.UISendTextHandlerF2 += SendText123;
    }

    //Event Handler for the event trigger in Form2
    void SendText123(string YourStringFromTextBox)
    {
        //Trigger Event
        if(UISendTextHandlerUC!=null)
            UISendTextHandlerUC(YourStringFromTextBox);
    }
}

Form1

public partial class Form1 : Form
{
    UserControl1 UC1;
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        if (UC1 == null)
        {
            UC1 = new UserControl1(textBox1);
            //Add event handler
            UC1.UISendTextHandlerUC += FinallyWeGetTheString;
        }
        Controls.Add(UC1);
        UC1.Visible = true;
    }

    //New
    void FinallyWeGetTheString(string YourStringFromTextBox)
    {
         textBox1.Text = YouStringFromTextBox;
    }
}