我目前正在尝试在自定义控件上创建悬停效果,鼠标进入控件后会显示一个面板(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
我认为这就是一切,但有很多代码可供选择。
断点不触发,按钮闪烁但没有任何反应。如果定时器间隔设置得很长,它可以正常工作,但一旦鼠标离开控件,按钮就会快速消失。如果鼠标在按钮上,则表单将其报告为已离开控件。
总结一下 - 点击它们时按钮并不总是处理。
答案 0 :(得分:0)
如果您的计时器每250毫秒滴答一次,可以防止鼠标点击该事件。
如果您不再需要,我会检查您在勾选后停止计时器,并在用户离开控件或再次输入时重新启动,因为我认为您正在执行此操作。
这可能是您设置较长时间间隔时的原因。