Возможно, вам будет проще использовать функцию автозаполнения, встроенную в элемент управления textbox, а не пытаться самостоятельно кодировать все возможные сценарии.
Существует два важных свойства элемента управления TextBox
, которые необходимо настроить для включения его функции автозаполнения: AutoCompleteMode
и AutoCompleteSource
.
Свойство AutoCompleteMode
позволяет выбрать как функция автозаполнения текстового поля будет выглядеть в действии. Вы можете выбрать любое из значений AutoCompleteMode
<b>None</b> Disables the automatic completion feature for the ComboBox and TextBox controls.
<b>Suggest</b> Displays the auxiliary drop-down list associated with the edit control. This drop-down is populated with one or more suggested completion strings.
<b>Append</b> Appends the remainder of the most likely candidate string to the existing characters, highlighting the appended characters.
<b>SuggestAppend</b> Applies both Suggest and Append options.
Свойство AutoCompleteSource
позволяет указать строки, с которыми текстовое поле должно предлагать автозаполнение. В вашем случае вы, вероятно, захотите указать CustomSource
, который требует, чтобы вы установили свойство AutoCompleteCustomSource
в пользовательский набор строк - что-то вроде «Apple» , Мяч, ... "и т. Д.
DataGridViewTextBoxColumn
просто содержит стандартный TextBox
элемент управления, поэтому все предоставляемые им функции автозаполнения уже доступны вам бесплатно. Вы можете установить соответствующие свойства этого текстового поля, обрабатывая событие EditingControlShowing
вашего DataGridView
, например так:
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;
}
}
РЕДАКТИРОВАТЬ: Если вы предпочитаете сохранить то же поведение, что и в исходном примере текстового поля, вы можете просто обработать событие TextChanged
для DataGridViewTextBoxColumn
, Как я уже объяснял выше, 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";
}
}
}