我制作了一个用户控件,并在主窗体中添加了一个面板中的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;
}
我该怎么做? 感谢
答案 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"是您的用户控件的名称