イベントの送信者は、実際にはボタンの1つです。送信者をボタンタイプにキャストすると、任意のボタンプロパティにアクセスして、押されたボタンを判別できます。
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)
です。イベントを発生させたい場合は、適切なスタイルは保護されたメソッドOnEventName(-int, -ed)
です。また、ユーザーコントロールを作成するときは、ビジネス用語を使用してイベントに名前を付けることができます。例:TaskCreated、TaskChanged。また、カスタム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();
}