c#计时器阻止按钮单击

时间:2014-04-16 20:16:29

标签: c# button timer controls

我目前正在尝试在自定义控件上创建悬停效果,鼠标进入控件后会显示一个面板(panel1)。

我有一个计时器,它在mouseleave事件被引发时启动,间隔为250ms,并且有一个onTick事件将panel1的可见性更改为false。

这一切都有效。但是,面板1上的按钮在单击时并不总是响应。

以下是相关代码 - 如果我遗漏了一些信息,我将提供其他所需的内容。

    private void MagicCardViewer_MouseLeave(object sender, EventArgs e)
    {
        timer1.Start();
        timer1.Interval = 250;
        timer1.Tick += new EventHandler(timer1_TickOff);
        timer1.Tick -= timer1_TickOn;
    }

    private void MagicCardViewer_MouseEnter(object sender, EventArgs e)
    {
        showPanel1();
    }

    public void showPanel1()
    {
        //show necessary controls
        buttonDiscard.Show();

        //show panel1
        panel1.Visible = true;
        ActiveControl = panel1;
    }

    public void hidePanel1()
    {
        panel1.Visible = false;
        //hide controls
    }

    # region button events
    private void buttonChoose_Click(object sender, EventArgs e)
    {
        Chosen = !Chosen;

        if (Chosen)
        {
            callCardChosen();
        }
    }

    private void buttonTap_Click(object sender, EventArgs e)
    {
        cards[0].ChangeTap();

        DrawCardTap();
        onCardChanged();
    }

    private void buttonActivate_Click(object sender, EventArgs e)
    {
        cards[0].TryActivate(0);
    }

    private void buttonDiscard_Click(object sender, EventArgs e)
    {
        cards[0].onDiscard();
    }
    # endregion

我认为这就是一切,但有很多代码可供选择。

断点不触发,按钮闪烁但没有任何反应。如果定时器间隔设置得很长,它可以正常工作,但一旦鼠标离开控件,按钮就会快速消失。如果鼠标在按钮上,则表单将其报告为已离开控件。

总结一下 - 点击它们时按钮并不总是处理。

1 个答案:

答案 0 :(得分:0)

如果您的计时器每250毫秒滴答一次,可以防止鼠标点击该事件。

如果您不再需要,我会检查您在勾选后停止计时器,并在用户离开控件或再次输入时重新启动,因为我认为您正在执行此操作。

这可能是您设置较长时间间隔时的原因。