Visual Studio 2010,C#
我有一个ComboBox
with a DropDown
, AutoComplete
set to SuggestAppend
和AutoCompleteSource
是来自ListItems
。用户将数据键入其中,直到输入正确。在数据与列表项之一匹配之前,组合框旁边的按钮将被禁用。
如果用户点击 Tab 键,自动完成功能会接受当前建议。它还会移至按选项卡顺序启用的下一个控件。当然,因为我希望它转到禁用按钮,所以我需要在验证条目后立即启用它。
问题是我尝试过的所有事件都没有,PreviewKeyDown
, LostFocus
, SelectedIndexChanged
让我及时启用该按钮,以便处理它并接收焦点。它总是按 Tab 键顺序转到始终启用的下一个按钮。
我准备让按钮保持启用状态,如果按得太早就会出现错误,但我不想那样做。我也不想使用特殊模式标志来跟踪这些控件何时获得焦点。验证似乎是一件很正常的事情,但我被困住了。
If the SelectedIndexChanged
当用户进行匹配时就起作用了,这很容易。当该框被清除或找到键入的匹配项时,它不会触发。
您可以创建自己的 ComboBox 类来封装此行为。像这样的事情:
using System;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.myComboBox1.TheButton = this.button1;
this.myComboBox1.Items.AddRange( new string[] {
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday"
} );
button1.Enabled = false;
}
}
public class MyComboBox : ComboBox
{
public Control TheButton { get; set; }
public MyComboBox()
{
}
bool IsValidItemSelected
{
get { return null != this.SelectedItem; }
}
protected override void OnValidated( EventArgs e )
{
if ( null != TheButton )
{
TheButton.Enabled = this.IsValidItemSelected;
TheButton.Focus();
}
base.OnValidated( e );
}
protected override void OnTextChanged( EventArgs e )
{
if ( null != TheButton )
{
TheButton.Enabled = this.IsValidItemSelected;
}
base.OnTextChanged( e );
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)