【问题标题】:I want to disable other buttons while my mouse is pointing to a button in C#我想在鼠标指向 C# 中的按钮时禁用其他按钮
【发布时间】:2017-01-16 03:44:46
【问题描述】:

当我的鼠标指向 C# 中的另一个按钮时,我想禁用其他按钮

 private void Form1_Load(object sender, EventArgs e){    
   foreach (Button btn in Controls.OfType<Button>())
   {
    btn.MouseEnter += new System.EventHandler(btn_MouseEnter);
    btn.MouseLeave += new System.EventHandler(btn_MouseLeave );
   }
}
private void btn_MouseEnter(object sender, System.EventArgs e) 
{
    var senderButton = (Button)sender;
    senderButton.Enable = true; // not working
}

private void btn_MouseLeave (object sender, System.EventArgs e) 
{
       var senderButton = (Button)sender;
       senderButton.Enable = false; // not working
}

【问题讨论】:

  • 所以.. 你想禁用除当前悬停按钮之外的所有其他按钮吗?
  • 您发布的代码试图禁用和重新启用 current 按钮,而不是 other 按钮。
  • 您的 btn_MouseEnter 事件只会在您的按钮启用时触发
  • 你的问题让我想知道你为什么要这样做...如果鼠标悬停在按钮 x 上,你将永远没有机会点击其他地方?
  • 这只是一个测试运行,以了解这些方法是否有效。

标签: c# .net winforms button


【解决方案1】:

这可能不是最好的解决方案,但无论如何我都会尝试。

private void btn_MouseEnter(object sender, System.EventArgs e) 
{
    var senderButton = (Button)sender;
    foreach(var btn in this.Controls.OfType<Button>())
    {
        if (btn != senderButton)
            btn.Enabled = false;
    }
}

private void btn_MouseLeave(object sender, System.EventArgs e)
{
    foreach(var btn in this.Controls.OfType<Button>())
    {
        btn.Enabled = true;
    }
}

【讨论】:

  • 作为@uthistran-s 的评论,当按钮被禁用时会触发事件吗?
  • @Alex 由于重新启用按钮的功能是由未禁用的按钮触发的,因此应该这样做。
【解决方案2】:

代替

senderButton.Enable = true;

您必须遍历所有按钮,例如

foreach(Button btn in this.Controls.OfType<Button>())
{
    if (btn != senderButton)
        btn.Enable = false; 
}

【讨论】:

    【解决方案3】:
    private void btn_MouseEnter(object sender, System.EventArgs e)
        {
            foreach (Button btn in Controls.OfType<Button>())
            {
                if (btn == ((Button)sender))
                {
                    btn.Enabled = true; 
                }
                else
                {
                    btn.Enabled = false;
                }
            }
        }
    
        private void btn_MouseLeave(object sender, System.EventArgs e)
        {
            foreach (Button btn in Controls.OfType<Button>())
            {
                btn.Enabled = true;
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2012-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-20
      相关资源
      最近更新 更多