【问题标题】: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;
}