【问题标题】:How to make combo box auto expand on mouse hover and close when the mouse leaves combo box in c#? [duplicate]如何使组合框在鼠标悬停时自动展开并在鼠标离开C#中的组合框时关闭? [复制]
【发布时间】:2014-08-28 11:04:17
【问题描述】:

我有一个 Windows 窗体。在那个窗口形式中,我有一个组合框。我在组合框中预定义了添加、删除和删除项。 我想让组合框在鼠标悬停时自动展开。我该怎么做?我注意到自动展开代码应该在组合框的鼠标悬停事件中给出。像这样

     private void comboBox1_MouseHover(object sender, EventArgs e)
    {

    }  

但我不知道如何展开组合框。谁能告诉我该怎么做?

好的,我完成了扩展部分

    private void comboBox1_MouseHover(object sender, EventArgs e)
    {
        comboBox1.DroppedDown = true;

    }

但是当我将鼠标指针离开组合框时,我想关闭组合框.. 怎么做?

【问题讨论】:

  • 看看我下面的评论!

标签: c# combobox windows-forms-designer mousehover


【解决方案1】:

使用DroppedDown 属性并使其为真,

 private void comboBox1_MouseHover(object sender, EventArgs e)
    {
      var box = sender as ComboBox ;
       box.DroppedDown = true;
    }  

【讨论】:

  • 这仅适用于组合框的小箭头部分。使用mouseenter,可能带有计时器会纠正这个问题。真正的挑战是在离开时关闭它。在某个地方有一个帖子,它确实有效,但据我所知,它相当硬核。顺便说一句:对于单个 cb,铸造是不必要的..
  • @TaW 是的,移除鼠标时它不会关闭。
  • @Sajeetharan 它可以工作,但问题是它没有在鼠标离开时关闭。
  • 在鼠标移动中:if (!comboBox1.ClientRectangle.Contains(e.Location)) comboBox1.Capture = false; else if (comboBox1.Capture == false) { comboBox1.DroppedDown = true; timer1.Interval = 1000; timer1.Start(); } 和在计时器中:Point MP = new Point(Cursor.Position.X - this.Location.X, Cursor.Position.Y - this.Location.Y); Size DDS = new Size(comboBox1.DropDownWidth, comboBox1.DropDownHeight); Rectangle DDR = new Rectangle(new Point(comboBox1.Left, comboBox1.Top + comboBox1.Height), DDS); if (!DDR.Contains(MP)) { comboBox1.DroppedDown = false; timer1.Stop(); }
  • @TaW 谢谢它的工作..再次感谢您的帮助..
【解决方案2】:

comboBox1.DroppedDown = true;

这里已经回答了Open ComboBox DropDown programmatically [duplicate]

实际上是Winforms: how to open combobox properly?的副本

【讨论】:

    猜你喜欢
    • 2012-07-21
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多