【问题标题】:Autocomplete TextBox for C# Winform VS2008 clarification needed需要 C# Winform VS2008 澄清的自动完成文本框
【发布时间】:2013-06-05 21:25:04
【问题描述】:

我正在开发 C# winform vs2008 项目。要求是将行级详细信息显示到网格中,并且网格一个文本框 cloumn 用户将键入文本,并且它应该填充自动完成文本。自动完成搜索应该只基于一列,但需要向用户显示额外的一列。示例:姓名和电话号码。用户将根据名称进行搜索,仅附加列电话应显示用途。

我有以下查询:

1) 数据库很大,有没有免费的自动完成 3 方工具可用。? 2) 如何在自动完成中显示多列。

请告诉我,如何在自动完成中显示多列。

我被困在这里..请帮帮我..

感谢和问候 拉姆

【问题讨论】:

  • 这并不容易。我认为您必须创建自定义下拉列表并实现所有事件处理程序。哇,这么多工作。
  • 您好,感谢您的回复。应该有某种方式,请给我一些例子。目前我可以使用名称集合在自动完成中显示一个文本集合。我想再绑定一列。如果我使用组合框,我如何分配 2 列。请澄清。
  • 尝试使用 Combobox.. 使用 BindingList<KeyValuePair<string, YourClass>> 作为其数据源,DisplayMember 作为 Value,ValueMember 作为 Key.. 为 YourClass 的 ToString() 定义一个覆盖,这样它就可以返回一个格式化字符串:“4 个制表符空格中的名称 PhoneNumber” 如果 ComboBox 内部解析其显示成员的字符串值,则可能无法正常工作。

标签: c# winforms autocompletebox


【解决方案1】:

有第三方组件可用于支持多列下拉,例如 DevExpress 的 LookUpEdit、Infragistics 的 UltraCombo 和 Telerik 的 RadMultiColumnComboBox。您可以更改过滤器,然后在键入时弹出下拉列表,但这不会超过 Windows 自动完成的性能,它使用第二个线程来枚举候选者。

如果您有这么多数据,如果您的控件库默认启用自动调整下拉列和动画的大小,则可能需要禁用它们。

【讨论】:

  • 您好,朋友,感谢您的回复。如果您知道任何可以在组合框上显示多列的代码,而不是第 3 方。我的要求是自动完成仅基于 1 列,但我需要单独显示其他列显示目的。我理解你关于性能的信息。如果我修复多列组合问题,我将进入下一步检查远程查询的性能。请检查并帮助我。非常感谢。
  • combobox类是win32原生控件的同名封装,不支持多列。您要么需要购买一个组件,要么从头开始编写一个。
  • 嗨,明白。谢谢你的回复。你有任何编写我们自己的控件的示例代码,我想开始我自己的控件。有的话请发帖。。谢谢。
  • 嗨,朋友,感谢您的链接.. 我已经检查了已经很好的第 3 方控件。我希望开始开发自己的控件,因为要求更多(多列,不同的排序和着色等)。所以请给我一个启动链接,我可以继续/启动新的控制正确的方式..请检查并帮助。谢谢
【解决方案2】:
public Class YourClass
{
    public string Name;
    {
       get;
       private set;
    }

    public string PhoneNo;
    {
       get;
       private set;
    }

    public override string ToString()
    {
       return String.Format("{0,-50} {1,-15}", this.Name, this.PhoneNumber);
    }
}

internal class YourForm : Form
{
    ComboBox YourComboBox = new Combobox();
    //Set the style of your combobox such that it looks like a text box

    BindingList<KeyValuePair<string, YourClass> bl = new Binding<string, YourClass>();


    //Query for the data to populate the BindingList
    //Lets say you put the UserId or ContactId of the person in the Key..        

    YourComboBox.DataSource = bl; 
    YourComboBox.DisplayMember = "Value";
    YourComboBox.ValueMember = "Key";     
}

为自动完成做你正在做的事情

没有现成且优雅的实现来满足您的需求。我给你的结果会像表格一样显示..

例如:-

  • 里斯 W 32
  • 帕梅拉 A 40

但是有了名字,在控件呈现的任何字体中占用空间字符..
(您必须在编辑模式下查看此答案才能看到)

如果您想要的正是您所需要的,您将不得不使用一些可用的第 3 方控件或编写您自己的控件。就像有人说的那样,代码太多了..

【讨论】:

  • 您好,Venat Renuka,感谢您的回复。我的要求是显示其他列(如 2 列)而不是格式化/添加字符串并显示。客户需要查看两个单独的列(如网格示例)。请协助。提前谢谢..
  • 您好,非常感谢您的回复。客户只需要在附加列中显示并包括一些颜色显示。我想编写自己的控件。你能指导我如何开始流程吗?如果您有任何示例自己的控制代码,请发给我,这对我有帮助..拜托。谢谢。
  • 您好,我正在计划创建自己的自动完成控件(由于在多列显示中发现一些限制,起始字母只能搜索,排序问题等)。为此,我在自动完成文本框中捕获结果并获取字符串并显示到列表框中。为此,我需要快速的搜索方式。如果我实现了这一点,我将在列表框中添加其他列(仅显示目的)和着色等。因为我想在我的自动完成中增强更多未来并且不想购买第 3 方控件。请指导我是否正确与否..
  • 我的 textchange 事件代码如下: foreach (String s in textBox2.AutoCompleteCustomSource) { if (s.Contains(textBox2.Text)) { listBox1.Items.Add(s); listBox1.Visible = true; } }...这里我需要更快的搜索,例如记录50000需要太多时间...请帮助我..
猜你喜欢
  • 2010-09-06
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多