如何在c#winform

时间:2015-11-25 15:09:34

标签: c# winforms user-controls

我制作了一个用户控件,并在主窗体中添加了一个面板中的click事件。我想得到用户控件,所以我可以使用其他东西,但发件人将是一个面板而不是用户控件。 这就是我所拥有的

void panel1_Click(object sender, EventArgs e)
{
    Panel p = (Panel)(sender);
    //UserControl1 tmp = .... 
    label1.Text = "Item Code:" + tmp.pro.product_code;
    label2.Text = "Name:" + tmp.pro.product_name;
    label3.Text = "Price:" + tmp.pro.product_price;             
}

我该怎么做? 感谢

1 个答案:

答案 0 :(得分:0)

我不太确定我是否正确阅读了这个内容,但是根据您的说法,我认为您在主表单上有一个面板和一个用户控件,并且您想要更新面板在主窗体上使用来自用户控件的值。如果这是正确的,那么试试这个

方法1:

void panel1_Click(object sender, EventArgs e)
{
    Panel p = (Panel)(sender);
    UserControl tmp;
    foreach (Control control in MainForm.Controls)
    {
        if (control is UserControl)
        {
            if (control.Name == "MyUserControlName")
            {
                tmp = control as UserControl;
            }
        }
    }

    //Let's check that we got the control
    if (tmp != null)
    {
        //Now find the controls / Variables that are holding your values in the user control first - I'm assuming textboxes

        TextBox txtProductCode = tmp.Controls.Find("TextBox1",false);
        TextBox txtProductName = tmp.Controls.Find("TextBox2",false);
        TextBox txtProductPrice = tmp.Controls.Find("TextBox3",false);

        label1.Text = "Item Code:" + txtProductCode.Text;
        label2.Text = "Name:" + txtProductName.Text;
        label3.Text = "Price:" + txtProductPrice.Text; 
    }
}

方法2:

除了删除foreach循环并替换以下

之外,所有内容都与方法1相同
    UserControl tmp;
    foreach (Control control in MainForm.Controls)
    {
        if (control is UserControl)
        {
            if (control.Name == "MyUserControlName")
            {
                tmp = control as UserControl;
            }
        }
    }

用这个

var tmp = MainFForm.Controls.Find("MyUserControlName",false);

其中" MainForm"是放置用户控件的主窗体的名称和" MyUserControlName"是您的用户控件的名称