计时器事件c#崩溃

时间:2013-05-24 09:42:04

标签: c# winforms timer crash

我有一个计时器事件,如下所示,我从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();
    }
}

2 个答案:

答案 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中,发件人是计时器,而不是按钮。因此,您将计时器转换为按钮(该方法中的第一行)。