您可能会发现使用文本框控件内置的自动完成功能更简单,而不是自己尝试为所有可能的场景编写代码。
您必须配置 TextBox 控件的两个重要属性以启用其自动完成功能:AutoCompleteMode 和 AutoCompleteSource。。 p>
AutoCompleteMode 属性允许您选择如何文本框自动完成功能将在操作中显示。您可以在任何AutoCompleteMode values 之间进行选择
无 禁用 ComboBox 和 TextBox 控件的自动完成功能。
Suggest 显示与编辑控件关联的辅助下拉列表。此下拉列表中填充了一个或多个建议的完成字符串。
Append 将最可能的候选字符串的其余部分附加到现有字符,突出显示附加的字符。
SuggestAppend 同时应用 Suggest 和 Append 选项。
AutoCompleteSource 属性允许您指定希望文本框自动完成的字符串。在您的情况下,您可能需要指定 CustomSource,这需要您将 AutoCompleteCustomSource 属性设置为用户定义的字符串集合,例如“Apple, Ball, .. 。”等
DataGridViewTextBoxColumn 只是托管一个标准的TextBox 控件,因此它提供的所有自动完成功能都已免费提供给您。您可以通过处理DataGridView 的EditingControlShowing 事件来设置此文本框的适当属性,如下所示:
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
//Create and fill a list to use as the custom data source
var source = new AutoCompleteStringCollection();
source.AddRange(new string[] {"Apple", "Ball"});
//Set the appropriate properties on the textbox control
TextBox dgvEditBox = e.Control as TextBox;
if (dgvEditBox != null)
{
dgvEditBox.AutoCompleteMode = AutoCompleteMode.Suggest;
dgvEditBox.AutoCompleteCustomSource = source;
dgvEditBox.AutoCompleteSource = AutoCompleteSource.CustomSource;
}
}
编辑:如果您希望保持与原始文本框示例中相同的行为,您可以处理DataGridViewTextBoxColumn 的TextChanged 事件强>。正如我在上面已经解释的那样,DataGridViewTextBoxColumn 只是托管一个标准的TextBox 控件,因此为其TextChanged 事件添加一个处理程序并使用与之前相同的代码相当简单:
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
TextBox dgvEditBox = e.Control as TextBox;
if (dgvEditBox != null)
{
//Add a handler for the TextChanged event of the underlying TextBox control
dgvEditBox.TextChanged += new EventHandler(dgvEditBox_TextChanged);
}
}
private void dgvEditBox_TextChanged(object sender, EventArgs e)
{
//Extract the textbox control
TextBox dgvEditBox = (TextBox)sender;
//Insert the appropriate string
if (dgvEditBox.Text.Length == 1)
{
if (dgvEditBox.Text == "B" || dgvEditBox.Text == "b")
{
dgvEditBox.Text = "Ball";
}
}
}