繁体   English   中英

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

[英]C# UserControl - Get property value each control inside UserControl on Click event

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

我的UserControl的图片

我使用了具有两列的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;
        }

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

您应该在用户控件内处理PictureBox的click事件,并在发生该事件时从UserControl引发click事件。

在用户控件内,您应该具有以下内容:

picturebox.Click += picturebox_click;


private void picturebox_click(object sender, EventArgs e)
{
    var handler = this.Click;
    if(handler != null)
    {
        handler(this, e);
    }
}

这样,您在图片框上的单击将触发对用户控件的单击,而该单击是您在表单中实际听到的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM