【问题标题】:ComboBox show dropdown menu on text selectionComboBox 在文本选择上显示下拉菜单
【发布时间】:2013-08-24 23:34:54
【问题描述】:

当用户选择文本时,我想在组合框中显示项目列表。我有一个触摸屏应用程序,很难点击下拉箭头,所以我想我会在选择文本时显示菜单,这通常是被触摸的内容。我正在使用 VS 2008。对于 VS2008 中触摸友好的数字上下解决方案的建议?

【问题讨论】:

  • 一些代码怎么样?你试过什么?

标签: c# visual-studio-2008 combobox touchscreen numericupdown


【解决方案1】:

您可以使用ComboBox.Click 事件处理程序和ComboBox.DroppedDown 属性并执行以下操作:

private void ComboBox1_Click(System.Object sender, System.EventArgs e)
{
    ComboBox1.DroppedDown = true;
}

您还可以对 numericUpDown 使用相同的事件处理程序,并使用鼠标位置以及 NumericUpDown 的位置和高度,通过执行类似的操作来获取单击是高于还是低于控件的中线这个(不确定我的数学是否完美,但在我测试时它有效):

if ((MousePosition.Y - this.PointToScreen(NumericUpDown1.Location).Y < NumericUpDown1.Height / 2)) 
{
    NumericUpDown1.Value += 1;
}
else 
{
    NumericUpDown1.Value -= 1;
}

HTH

【讨论】:

    【解决方案2】:

    我正在处理类似的情况。我们想让文本区域的行为与右侧的按钮相同。 (IE用户点击获取下拉框)

    davidsbro 与我最终做的类似,但我们希望在他们再次点击时关闭它,因此值变为dropDown.DroppedDown = !dropDown.DroppedDown;

    这样的问题是,如果用户点击下拉框的右键,对话框打开,然后调用onClick事件。

    我通过onmouseover 事件跟踪原始状态解决了这种情况。如果值发生了变化,我们必须假设选择框上的按钮已经处理了点击。

    private bool cbDropDownState = false;
    private void dropDown_MouseEnter(object sender, EventArgs e)
    {
        cbDropDownState  = dropDown.DroppedDown;
    }
    
    private void dropDown_Click(object sender, EventArgs e)
    {
        if (dropDown.DroppedDown == cbDropDownState )
            dropDown.DroppedDown = !dropDown.DroppedDown;
    }
    

    【讨论】:

      猜你喜欢
      • 2020-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-15
      相关资源
      最近更新 更多