gpt4 book ai didi

c# - 在流程布局面板中按下了哪个按钮?

转载 作者:太空宇宙 更新时间:2023-11-03 22:01:14 25 4
gpt4 key购买 nike

对于我当前的项目,我将可变数量的 usercontrols : ucTask 添加到我的 flowlayoutpanel : flpTasks

foreach (task t in tasks)
{
ucTask uct = new ucTask();
uct.id = t.task_id;
uct.date= t.date.ToString();
uct.btnNaam = t.task_id.ToString();

uct.OnButtonclick += new EventHandler(uct_OnButtonclick);

flpTasks.Controls.Add(uct);
}

ucTask

现在我将在 flowlayout 面板中有几个这样的用户控件,我想在按下该按钮时触发一个事件。使用 EventHandler 我可以触发事件,但我需要为不同的按钮触发不同的事件。

    void uco_OnButtonclick(object sender, EventArgs e)
{
lblStatus.Text = "TEST";
}

我不知道如何知道我按下了哪个按钮(或用户控件)。我没有想法,有什么建议吗?

谢谢,托马斯

最佳答案

事件的发送者实际上是按钮之一。当您将 sender 转换为 Button 类型时,您可以访问任何 Buttons 属性并确定按下了哪个按钮:

void uco_OnButtonclick(object sender, EventArgs e)
{
Button button = sender as Button;
if (button == null)
return;

lblStatus.Text = button.Name;
}

更新:再次阅读您的问题后,我了解到 ucTask 实际上是 UserControl,它在单击其中的按钮时触发事件。

所以,首先是命名。在 C# 中类名的良好风格是 PascalCase。例如。任务用户控件的好名字将是 TaskControl。接下来是事件命名。通常将事件命名为 EventName(-ing, -ed)。如果你想引发事件,那么好的风格是 protected 方法 OnEventName(-int, -ed)。还有一点——当您编写用户控件时,您可以自由使用业务术语来命名您的事件。例如。任务已创建,任务已更改。您还可以通过创建自定义 EventArgs 将任何参数传递给您的事件。

因此,对于您的用户控制:

public class TaskChangedEventArgs : EventArgs
{
public TaskChangedEventArgs(int taskId)
{
TaskId = taskId;
}
public int TaskId { get; private set; }
}

public class TaskControl : UserControl
{
public event EventHandler<TaskChangedEventArgs> TaskChanged;

// raise it inside button click event handler
protected void OnTaskChanged(int taskId)
{
if (TaskChanged != null)
TaskChanged(this, new TaskChangedEventArgs(taskId));
}
}

当您使用您的用户控件时,只需订阅它的 TaskChanged 事件:

uct.TaskChanged += new EventHandler<TaskChangedEventArgs>(uct_TaskChanged);

您通过事件参数传递的所有参数都将在该事件处理程序中可用:

void uco_TaskChanged(object sender, TaskChangedEventArgs e)
{
lblStatus.Text = e.TaskId.ToString();
}

关于c# - 在流程布局面板中按下了哪个按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10012456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com