订阅并捕获子控件点击事件

Posted

技术标签:

【中文标题】订阅并捕获子控件点击事件【英文标题】:Subscribe and Catch child control click event 【发布时间】:2021-12-20 22:20:47 【问题描述】:

我有一个包含自定义列表控件的表单。在这个列表控件中,有一个名为 flpListBox 的 flexlayout 控件,其中包含多行结果。

我在捕捉每个项目的点击事件时遇到问题。我可以 MessageBox 发送者对象键(在这种情况下是歌曲名称),并且每行点击都是正确的,但我想在父主表单标签 lblNowPlaying.Text 上显示点击结果歌曲名称

在 ListControl 中,我有这个

public void Add(string Song, string Artist, string Album)

    var c = new ListControlItem();
    c.Name = "item" + (flpListBox.Controls.Count + 1);
    c.Margin = new Padding(0);
    c.Song = Song;
    c.Artist = Artist;
    c.Album = Album;
    c.SelectionChanged += SelectionChanged;
    c.Click += ItemClicked;
    flpListBox.Controls.Add(c);
    SetupAnchors();


public event ItemClickEventHandler ItemClick;
public delegate void ItemClickEventHandler(object sender, int Index);

private void ItemClicked(object sender, EventArgs e)

   ListControlItem c = (ListControlItem)sender;
   //MessageBox.Show(c.Song);

   ItemClick?.Invoke(this, flpListBox.Controls.IndexOfKey(c.Song));
   //ItemClick?.Invoke(this, flpListBox.Controls.IndexOfKey((sender as ListControlItem).Song));

在父表单 Form1 中我有

InitializeComponent();
ListControl1.ItemClick += new ListControl.ItemClickEventHandler(ListControl1_ItemClick);
private void ListControl1_ItemClick(object sender, int Index)

   MessageBox.Show("event caught");
   lblNowPlaying.Text = "Now Playing: item index " + Index;

ListControl1.ItemClick 的引用正确地引用回来,所以我不明白为什么我不能从子控件中捕获歌曲名称,并发送到父表单标签。

也许有人可以指出我正确的方向,非常感谢

【问题讨论】:

【参考方案1】:

在意识到这一点并做出正确更改后,我分配了错误的控件名称,代码按预期工作。

【讨论】:

以上是关于订阅并捕获子控件点击事件的主要内容,如果未能解决你的问题,请参考以下文章

将子控件的点击事件传递给父控件

将子控件的点击事件传递给父控件

事件捕获事件冒泡事件委托

事件捕获事件冒泡事件委托

listview嵌套 子控件点击事件被拦截怎么做

scrollview添加手势 不影响子控件点击事件