我有一个像这样的自定义UserControl(它的名字是 TP1CustomListView ):
我使用了一个带有2列的TableLayoutPanel来保存图片(在第一列上)和另一个TableLayoutPanel(在第二列上)。第二列中的TableLayoutPanel有3行来容纳3个TextBox。
我在UserControl中为PictureBox写了一个Click事件,如下所示:
//events
public new event EventHandler Click
{
add { picbox.Click += value; }
remove { picbox.Click -= value; }
}
在Form1中,我有10个UserControl,就像我附在主题顶部的图片一样。我在Form1中为所有UserControl编写了一个Click事件。我尝试将每个UserControl的发送者转换为Click,以在UserControl中获得3 TextBox的3值。但我得到的结果是" NULL"。
这是我的Click事件代码:
public Form1()
{
InitializeComponent();
foreach (Control c in this.Controls)
{
TP1CustomListView ctLV = c as TP1CustomListView;
if (ctLV != null)
{
ctLV.Click += ctLV_Click;
}
}
}
void ctLV_Click(object sender, EventArgs e)
{
TP1CustomListView customView = sender as TP1CustomListView;
if(customView!=null)
{
MessageBox.Show(customView.subtbTitle.Text + customView.subtbContent.Text + customView.subtbFooter.Text);
}
}
这是我的TP1CustomListView(UserControl)中的构造函数和子控件:
//sub controls
public PictureBox subPicbox;
public TextBox subtbTitle;
public TextBox subtbContent;
public TextBox subtbFooter;
public TP1CustomListView()
{
InitializeComponent();
subtbTitle = txtTitle;
subtbContent = txtContent;
subtbFooter = txtFooter;
subPicbox = picbox;
tableLayoutPanel1.Dock = DockStyle.Fill;
}
希望每个人都能给我一些建议或解决我的问题。 谢谢!
答案 0 :(得分:1)
您应该在用户控件中处理PictureBox的单击事件,并在发生这种情况时从UserControl引发单击事件。
在您的用户控件中,您应该具有以下内容:
picturebox.Click += picturebox_click;
private void picturebox_click(object sender, EventArgs e)
{
var handler = this.Click;
if(handler != null)
{
handler(this, e);
}
}
这样,点击图片框就会触发用户控件的点击,而点击就是您在表单中实际收听的内容。