我有一个计时器事件,如下所示,我从this帖子得到了一些建议。你能告诉我这有什么问题吗?我遇到了以下崩溃:
无法将System.Windows.Forms.Timer
类型的对象转换为System.Windows.Forms.Button
类型。
关于我哪里出错的任何建议??
public MainForm()
{
InitializeComponent();
ButtonTimer.Tick += new EventHandler(ButtonTimer_Tick);
ButtonTimer.Interval = 100;
}
private void ButtonTimer_Tick(object sender, EventArgs e)
{
Button CurrentButton = (Button)sender;
string PressedButton = CurrentButton.Name;
switch (PressedButton)
{
case "BoomUp":break;
}
}
private void BoomUp_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
//ButtonTimer.Enabled = true;
ButtonTimer.Start();
}
}
private void BoomUp_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
ButtonTimer.Stop();
}
}
答案 0 :(得分:2)
ButtomTime_Tick
方法存在问题:
Button CurrentButton = (Button)sender;
sender
不是Button
,而是Timer
。
那么你现在要做什么?
您可以在班级中添加私人字段
private Button currentButton_;
和
private void BoomUp_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
currentButton_ = e.Button;//but I don't know if e.Button has a Name "BoomUp"
//you can set the name manually if needed :
currentButton_.Name = "BoomUp";
//ButtonTimer.Enabled = true;
ButtonTimer.Start();
}
}
和
private void ButtonTimer_Tick(object sender, EventArgs e)
{
switch (currentButton_.Name)
{
case "BoomUp":break;
}
}
答案 1 :(得分:1)
在ButtonTimer_Tick
中,发件人是计时器,而不是按钮。因此,您将计时器转换为按钮(该方法中的第一行)。