2011-05-14 51 views
0

如何在具有自动完成功能的行中使用带有独特字符的文本框并将其下拉为活动状态?在一行中使用分隔符的自动完成文本框

当在文本框中,我输入第一个独特的字符,我有自动完成和下拉菜单,我的意思是他们都是积极的。 但是,只要我想在我的文本框中添加另一个独特的字符,我的自动完成和我的下拉菜单中都没有激活。我的意思是他们不显示自己。只是在第一次使用秀。 使用哪个代码,我可以使自动完成,并在每个阶段后独特的字符下降活跃?

我使用平台获奖形式。

+3

对不起,我只是不明白你在问什么。也许如果你发布了你到目前为止的代码以及你有什么VS的例子。你想要什么,我们可能会提供帮助。 – 2011-05-14 18:37:47

+0

谢谢。例如看下面的代码:var source = new AutoCompleteStringCollection(); source.AddRange(新的String [] { “一月”, “二月”, “三月”, “四月”, “五一”, “六一”, “七月”, “八一”, “September”, “October”, “November”, “December” }); myTextBox.AutoCompleteSource = AutoCompleteSource。CustomSource; myTextBox.AutoCompleteCustomSource = source; myTextBox.AutoCompleteMode = AutoCompleteMode.SuggestAppend ;.但我不知道如何显示在myTextBox - > 八月;十二月;五月 – 2011-05-14 19:51:30

+0

我相信你不能这么简单的方式 - 使用自动补全,你只能选择一个选项整个文本框。您可以考虑创建自己的用户控件,或者在选择完成后尝试重新创建源列表:在1'st选择后,如果选择8月,则重建列表为:“August January”; “八月二月”; “八月三月”...等等。未经测试,不完全符合您的需求,但应该接近于此。我的建议是:想想你是否真的需要这种方式,并使用不同的方式,例如组合框或带有月份名称的列表框+用于结尾的文本框,以及结束的位置+“添加”按钮。 – mj82 2011-05-14 22:05:40

回答

1

如果您需要选择多个月,那么您可以使用多选ListBox。 ListBox将包含月份列表,用户可以通过按住Ctrl键并单击来选择多个月份。但是,多选列表框不被认为是一种很好的用户体验,因为用户可能会遇到困难。

如果选择的顺序很重要,可以使用mj82所描述的方法。在这种情况下,您的ListBox应该处于单选模式。用户在列表框中选择一个月,然后单击添加按钮将月份添加到文本框。

然而在后一种情况下,我会建议使用两个ListBox。左边的一个是完整的月份列表,用户将选定的月份从左侧的列表中移动到右侧的列表中。如果所选月份的顺序很重要,那么您还应该添加向上移动向下移动按钮,以便用户可以更改所选列表中的顺序。

你对话可能类似于此:
Customize Toolbar dialog of Internet Explorer 8

0

对于一个非常简单的例子,没有复杂的逻辑,拖2个列表框+ 2个按钮的形式。然后附上以下代码。正如你所看到的,将一个选定的项目从一个列表框移动到另一个列表框是一种简单的方法。它连接到按钮的点击和列表框双击事件。

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     listBox1.Items.AddRange(new string[] { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }); 

    } 

    //ADD button 
    private void button1_Click(object sender, EventArgs e) 
    { 
     MoveItem(listBox1, listBox2); 
    } 

    private void listBox1_DoubleClick(object sender, EventArgs e) 
    { 
     MoveItem(listBox1, listBox2); 
    } 


    //REMOVE button 
    private void button2_Click(object sender, EventArgs e) 
    { 
     MoveItem(listBox2, listBox1); 
    } 

    private void listBox2_DoubleClick(object sender, EventArgs e) 
    { 
     MoveItem(listBox2, listBox1); 
    } 

    /// <summary> 
    /// Moves item from one listbox to another 
    /// </summary> 
    /// <param name="listBoxFrom">Origin listbox</param> 
    /// <param name="listBoxTo">Destination listbox</param> 
    private void MoveItem(ListBox listBoxFrom, ListBox listBoxTo) 
    { 
     if (listBoxFrom.SelectedItems.Count == 1) 
     { 
      listBoxTo.Items.Add(listBoxFrom.SelectedItem); 
      listBoxFrom.Items.Remove(listBoxFrom.SelectedItem); 
     } 
    } 
} 

那么您可以考虑禁用如不选择的项目按钮的其他操作,添加UP/DOWN按钮或排序项的列表(蛾的名称列表不过,你不能用简单的词汇排序 - 你将有使用和排序字典或您自己的类/结构对象)。

最后,检索选定的项目,类似这样使用代码:

System.Text.StringBuilder sb = new StringBuilder(); 
foreach (object obj in listBox2.Items) 
    sb.Append(obj).Append(";"); 

MessageBox.Show("Your selection is: " + sb.ToString());