如何知道winforms c#中点击了哪个按钮?

时间:2016-04-24 23:14:12

标签: c# winforms label buttonclick

好的,这有点难以解释。

我正在制作基本的时间表格式。

我有7个按钮,名为btnMonTimebtnTueTime,依此类推,直到btnSunTime为止,基于星期几。现在,每按一次按钮,就会打开一个弹出窗口(winform),让用户通过dateTimePicker控件选择一段时间。时间被解析为字符串并存储。弹出窗口上有一个接受按钮,当按下该按钮时,弹出窗口将关闭,并在特定日期旁边显示一个标签说明时间的标签。

Image where popup comes up when Time beside Monday is clicked

`Image where label with the time has to be places beside the particular day whose Time button was pressed

现在我知道如何在某一天做到这一点,但问题是我有一个功能来做这个标签创建。但是,我如何知道点击了哪个时间按钮以将其放置在正确的位置?

这是我能提出的代码:

private void btnAccept_Click(object sender, EventArgs e)
{
        formPopup.time = timePicker.Value.ToShortTimeString();
        //label1.Text = formPopup.time;

        Label newLabel = new Label();
        newLabel.Text = formPopup.time;
        newLabel.Location = new System.Drawing.Point(205 + (100 * formTimeTable.CMonTime), 78);
        formTimeTable.CMonTime++;
        newLabel.Size = new System.Drawing.Size(100, 25);
        newLabel.ForeColor = System.Drawing.Color.White;
        thisParent.Controls.Add(newLabel);

        this.Close();
}

这是 Accept 按钮单击处理程序,它将标签放在正确的位置。而变量CMonTime会跟踪按下特定时间按钮的次数。

public static int CMonTime = 0;
private void btnMonTime_Click(object sender, EventArgs e)
{
    formPopup f2 = new formPopup();
    f2.thisParent = this;
    f2.Show();      
}

这就是星期一的时间按钮点击处理程序中发生的事情。

但我怎么知道实际点击哪一天的时间按钮以正确放置时间戳标签?

如果单击星期二的时间按钮,则时间戳应显示在星期二的时间按钮旁边。

我试图尽可能清楚。

提前致谢。

3 个答案:

答案 0 :(得分:2)

您可以通过将sender参数转换为Button控件来获取单击的按钮。 使用按钮的位置作为formPopup构造函数的参数

private void btnMonTime_Click(object sender, EventArgs e)
{
    var button = (Button)sender;
    formPopup f2 = new formPopup(button.Location);
    f2.thisParent = this;
    f2.Show();      
}

表单为例

Point _buttonLocation;

public frmPopup(Point buttonLocation)
{
    _buttonLocation = buttonLocation;
}

然后使用按钮的位置设置标签的位置

private void btnAccept_Click(object sender, EventArgs e)
{
    formPopup.time = timePicker.Value.ToShortTimeString();

    Label newLabel = new Label();
    newLabel.Text = formPopup.time;
    newLabel.Location = new Point(_buttonLocation.X + 100, _buttonLocation.Y);

    formTimeTable.CMonTime++;
    newLabel.Size = new System.Drawing.Size(100, 25);
    newLabel.ForeColor = System.Drawing.Color.White;
    thisParent.Controls.Add(newLabel);

    this.Close();
}

答案 1 :(得分:0)

sender是引发事件的对象。在您的情况下,它将是用户单击的按钮。

答案 2 :(得分:0)

由于这些控件组合重复,因此创建包含所需按钮和标签的UserControl可能更容易。将UserControl视为由少量控件组成的小表单,并根据需要将其放置在表单上。它有自己的事件处理程序。这样,技术上只有一个按钮(不是七个)和一个事件处理程序。然后,您可以将UserControl放在表单上七次。

还有其他方法可以避免重复代码,例如拥有一个事件处理程序并将其分配给所有七个按钮的单击事件。但是如果你想编辑按钮本身的布局,UserControl将真正节省你的时间。你不想七次这样做。

尝试一下:

  • 添加>新商品>用户控制。你会得到一个看起来像新表格的东西。添加一些控件就像添加控件到表单一样。然后使用名称保存它(仅为了示例)MyUserControl.cs
  • 构建项目。
  • 工具箱中会出现一个新的工具箱标签,您的控件就会出现在那里。
  • 将控件拖到窗体上,就像控制任何其他控件一样。

More info on creating user controls