C#UserControl - 获取Click事件中UserControl内的每个控件的属性值

时间:2018-01-18 04:07:57

标签: c# winforms user-controls

我有一个像这样的自定义UserControl(它的名字是 TP1CustomListView ):

Picture for my UserControl

我使用了一个带有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;
        }

希望每个人都能给我一些建议或解决我的问题。 谢谢!

1 个答案:

答案 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);
    }
}

这样,点击图片框就会触发用户控件的点击,而点击就是您在表单中实际收听的内容。