C# Winforms .NET:为用户控件创建按钮单击事件

mdfafbf1  于 2023-06-30  发布在  C#
关注(0)|答案(1)|浏览(122)

C# Winforms(.NET框架)用户控件有问题。

  • 我有一个'通知'用户控件包含一个按钮,和一些信息。
  • 我有一个'todaylist'表单,它可以通过数据库动态生成UC。

我不知道如何为按钮创建事件。当我单击一个按钮时,我想从UC获取一个信息(标签)。
这是用户控件(我想得到'label2'文本)

生成的用户控件:

我试过这个方法,但没有结果:

已编辑:

用户控制:

public event EventHandler<ActionTaskEventArgs> ActionTaskClicked;

        private void button1_Click(object sender, EventArgs e)
        {
            string cardid = label2.Text;
            var args = new ActionTaskEventArgs(cardid);
            ActionTaskClicked?.Invoke(this, args);
        }

        public class ActionTaskEventArgs : EventArgs
        {
            public ActionTaskEventArgs(string taskId)
            {
                TaskId = taskId;
            }

            public string TaskId { get; }
        }

形式:

//UC generating:
if (statusz[i] == "Kiadott")
{
    listItems[i] = new notifications();

    listItems[i].Title = title[i];
    listItems[i].Details = details[i];
    listItems[i].Id = id[i].ToString();
    listItems[i].Finish = "Ma";
    listItems[i].BtnTxt = "Kezdés";
    listItems[i].BtnVisible = true;
    listItems[i].color = Color.FromArgb(254, 95, 85);

    flowLayoutPanel1.Controls.Add(listItems[i]);
    listItems[i].ActionTaskClicked += this.ActionTask_Clicked;
}

//
private void ActionTask_Clicked(object sender, notifications.ActionTaskEventArgs e)
{
    MessageBox.Show(e.TaskId);
}

有人能帮帮我吗
现在我得到一个错误:

void UC_Click(object sender, EventArgs e)
    {
        //I gave an error for the below row! Can't convert button type to notifications type i guess.
        notifications obj = (notifications)sender;
        MessageBox.Show(obj.Id);
    }
3qpi33ja

3qpi33ja1#

您可以通过定义自定义添加/移除访问器将用户控件的事件“转发”到按钮:

// UC:
public event EventHandler ButtonClick
{
    add => btn.Click += value;
    remove => btn.Click -= value;
}

在主窗体中,您订阅了notifications.Click(它似乎是多个子控件的生成用户控件)。但实际上你应该订阅一个子控件的ButtonClick

((UC)asd.Controls[0]).ButtonClick += Child0Click;

相关问题