【问题标题】:Auto resolution text box control for .NET Windows Forms.NET Windows 窗体的自动解析文本框控件
【发布时间】:2009-05-27 18:00:52
【问题描述】:

我需要创建一个文本框,它会根据值列表自动解析用户键入的内容,类似于电子邮件客户端中的“收件人”字段。

例如,我的列表有以下值:

汽车 房子 树

键入“hou”会自动解析为“House”,并且尝试删除该单词的单个字母(使用退格或删除)会完全删除它,而且它也不会让人们弄乱已经解析的单词(例如“Hou[something]se”)。

当然,我可以使用常规文本框创建它并控制键入的内容并使用已解析的单词保持结构.....不过有很多例外需要处理,我不愿意重新发明轮子。以前有没有人实施过类似的事情? Visual Studio 中是否有任何控件可以提供类似于我所描述的内容?

更新

请注意,我了解常规文本框支持自动补全,但除了自动补全我还需要自动解析,这是一个不同的概念...

【问题讨论】:

  • 编辑问题的好主意,但您是否可以这样做,以使您的初始版本看起来不像已经提供的答案不会突然出现完全错误?只有对我们这些愿意回答的人表示礼貌,您才不会使他们的回答无效。
  • 对不起!我的错。

标签: .net winforms controls


【解决方案1】:

标准的TextBox 控件已经通过AutoCompleteSourceAutoCompleteModeAutoCompleteCustomSource 属性支持此功能。

您可以使用AutoCompleteSource 选择标准完整源,也可以指定自定义列表,然后将AutoCompleteStringCollection 对象提供给AutoCompleteCustomSource 属性。虽然我没有尝试过,但我怀疑这不像 Win32 变体那样灵活,您可以根据迄今为止输入的内容动态提供自动完成结果,但您可以通过覆盖AutoCompleteStringCollection

更新

此答案是在问题更改以表明 OP 已经知道此信息之前提供的。

【讨论】:

  • 谢谢,杰夫,但这只会自动完成,对吧?它不会解析单词......我的意思是,如果我尝试删除一个单词,我将不得不删除每个字母,例如......正如我所说,我需要的是一个类似于MS Outlook 中的“收件人”字段...
  • 不,它应该根据您选择的模式解析单词。
  • 要将单词解析为其他实体,您肯定需要添加自己的功能。
【解决方案2】:

我将创建一个包含流布局控件的用户控件。 flowlayout 控件将自动调整到用户控件的大小。

在开始时,flowlayoutcontrol 将包含一个没有任何可见边框的焦点文本框。 用户输入文本,并为每次击键尝试解析单词。 如果它解析为一个单词,则在文本框之前添加一个标签,该标签将解析的单词作为文本,其字体带有下划线。现在文本框已清除以供新条目。 如果用户在空文本框中按下退格键或左键,请在 flowlayout 中选择上一个控件并将该标签字体设置为粗体并等待(删除以删除单词或向左箭头和向右箭头导航到另一个单词或空文本框)。 站在已解决的单词上时:如果按向左,则移动文本框,使其现在位于已解决单词的左侧。如果按右,则将文本框移动到已解析单词的右侧。双击标签将删除标签并激活文本框,其中的文本已准备好进行编辑。

通过使用标签(=已解析的单词)和用于输入新单词的文本框,可以很容易地模拟电子邮件程序中的“收件人”字段。唯一“难”的是让用户选择多个单词并删除,但有很多解决方案(google +flowlayoutcontrol +multiple +select)。并且还可以在文本框上自动完成以“解析”到已知的单词列表。

我的一台计算机上有一个用户控件,今天会处理它。如果我找到它,我将上传源代码并使用 zip 文件的链接更新答案。

编辑: 没有找到程序,所以我花了 30 分钟从头开始重写它,使用 (flowlayoutcontrol,label,textbox) 作为用户控件

电影直播:http://www.youtube.com/watch?v=1MJ7bmFcCmE

当然,这个 30 分钟的 hack 并不完美。一些导航的东西要实现。也许我今晚修好它。如果有人对此示例代码进行了改进,请将其发布在此线程中以供所有人受益。

以下是此示例的源代码: http://www.filefactory.com/file/cda1d84/n/testproj.zip

【讨论】:

    猜你喜欢
    • 2011-12-23
    • 1970-01-01
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多