我正在构建一个C#客户端应用程序,该应用程序允许用户通过类似电子邮件的隐喻与系统中的一个或多个现有用户进行通信。我想为用户提供一个文本输入框,该框会在已知的电子邮件地址上自动完成,并允许输入多个以分隔符分隔的地址。理想情况下,我还希望电子邮件地址在输入并被识别后可以转变为结构化控件。基本上,我正在为UI交互建模,以便在Facebook模型之后添加用户。
是否有Windows Forms控件可以执行类似操作?是否有用于混合文本框/控件列表框(不,不是ComboBox)或我应该搜索的东西的行之有效的术语?
谢谢,
-帕特里克
最佳答案
过去,我很幸运能够使用本机.NET Winforms控件创建复合用户控件以提供特定功能。只要没有太多,它就可以很好地工作,在这种情况下,事情开始变慢。
就您而言,这只是我的首要任务,但是,也许您可以使用支持自动完成功能的FlowLayoutPanel,Button和Textbox并将它们放在一起以创建一个控件,该控件将提供您所需要的功能寻找。
如果控件中没有选择地址(例如在List 中),则容器(FlowLayoutPanel)将仅显示TextBox。一旦用户选择了一个条目,该控件将自动创建一个带有适当标题的Button并将其插入到FlowLayoutPanel的左侧。如果用户删除他/她已经选择的地址,只需从FlowLayoutPanel中删除其表示(按钮),然后TextBox可以相应地调整大小。使TextBox填充剩余空间可能存在问题(我不记得该怎么做),但是您明白了。该容器不必是FlowLayoutPanel-为此,您可以使用带有停靠控件的面板,甚至可以使用TableLayoutPanel。
我所描述的一种设计将允许用户通过单击按钮来删除地址。但是,由于没有其他视觉提示,因此不是很直观或用户友好,因此我将考虑使“按钮”成为另一个复合控件,其中包含“已装饰”标签以及微小的删除按钮(X)在右边。为此,您可以使用面板控件并将X按钮停靠在右侧,然后在左侧填充标签。您将在此处根据需要提供公共属性,以控制文本并为删除功能提供事件处理程序或回调。
可视化工作一旦完成,剩下的就是在主控件上提供适当的属性和方法,以使其能够根据需要与外部代码进行交互。
关于c# - 如何构建Windows窗体可识别电子邮件的文本框?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3057693/