好的,这有点难以解释。
我正在制作基本的时间表格式。
我有7个按钮,名为btnMonTime
,btnTueTime
,依此类推,直到btnSunTime
为止,基于星期几。现在,每按一次按钮,就会打开一个弹出窗口(winform),让用户通过dateTimePicker
控件选择一段时间。时间被解析为字符串并存储。弹出窗口上有一个接受按钮,当按下该按钮时,弹出窗口将关闭,并在特定日期旁边显示一个标签说明时间的标签。
现在我知道如何在某一天做到这一点,但问题是我有一个功能来做这个标签创建。但是,我如何知道点击了哪个时间按钮以将其放置在正确的位置?
这是我能提出的代码:
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();
}
这就是星期一的时间按钮点击处理程序中发生的事情。
但我怎么知道实际点击哪一天的时间按钮以正确放置时间戳标签?
如果单击星期二的时间按钮,则时间戳应显示在星期二的时间按钮旁边。
我试图尽可能清楚。
提前致谢。
答案 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
。