0

我在自动完成模式下使用AutoCompleteCustomSourcefor a 。这按预期工作;但是,当出现自动完成建议时,我仍然需要访问用户输入的文本。也就是说,当出现建议时, 的属性将返回该建议。TextBoxAppendTextTextBox

有没有办法只检索用户键入的字符串?

更新:我的限制之一是我必须使用Append自动完成模式。

4

3 回答 3

1

您是否尝试将属性设置为仅建议,这样文本框的文本属性将始终是用户输入的字符串,直到用户选择建议。

于 2012-08-15T18:18:01.063 回答
0

作为示例,您需要执行以下操作,这是从我刚刚在 Designer.cs 文件中测试的 Windows 项目中粘贴的

赢得表格示例

this.txtStudGrade.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;
this.txtStudGrade.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;

在设计器中设置 DropDownList AutoCompleteSource.ListItems;在设计器中设置 DropDownList AutoCompleteMode = AutoCompleteMode.Suggest;

WebForm 您可以使用 JQuery 来查看下面的链接以获取工作示例

使用 JQuery 自动完成

于 2012-08-15T19:07:47.533 回答
0

似乎没有一种简单的机制来仅检索用户输入的数据,在尝试解决此问题后,我可以理解原因。什么构成用户输入的数据并不总是很清楚,微软似乎决定不解决这个问题。

TextChanged我决定通过注册事件来手动跟踪用户数据。由于每次击键都会触发此事件,通过跟踪 的先前值Text,我可以确定是否发生了追加自动完成或粘贴操作。

下面的代码片段来自我的自定义类的TextChanged事件处理程序;包含用户输入的数据(类型)。TextBoxUserTextstring

if (string.IsNullOrEmpty(UserText) || 
    UserText.Length > Text.Length || 
    UserText.Length + 1 == Text.Length)
{
  UpdateUserText(Text);
}

UpdateUserText(string)首先确定是否发生了更改,如果是,则将新值分配给UserText并发出事件。在粘贴操作的情况下,可以使用此处发布的解决方案;但是,我选择执行以下操作:

MouseClick += UpdateUserText;
KeyUp += UpdateUserText;

//--------------------------------------------------------

private void UpdateUserText(object sender, EventArgs args)
{
  if (SelectionLength == 0)
  {
    UpdateUserText(Text);
  }
}

这样,如果 中的文本TextBox不再突出显示,那么我认为它已成为用户输入的文本。这负责粘贴操作(通过键盘或鼠标)并满足用户按下箭头键以尝试接受自动完成建议的情况。

我决定忽略的边缘情况之一是当用户输入了整个单词但最后一个字符时,在这种情况下,我将无法区分自动完成建议和用户输入。

我还考虑使用 aStringBuilder手动跟踪用户输入的数据,但我认为这比跟踪已经构建stringText.

如果有人有建议,我总是愿意接受更好的实施:)

于 2012-08-27T16:38:10.790 回答