使用行中的分隔符自动填充文本框

时间:2011-05-14 18:34:53

标签: c# winforms

如何在行中使用带有独特字符的文本框,并自动完成并显示下拉?

在文本框中,我输入第一个特色字符,我有自动完成和下拉菜单,我的意思是它们都是活动的。 但是,只要我想在我的文本框中添加另一个独特的字符,我的自动完成和我的下拉菜单都没有激活。我的意思是他们没有表现出来。只是在第一次使用节目。 使用哪个代码,我可以在特殊字符之后的每个阶段使自动完成和下拉活动?

我使用平台获胜形式。

2 个答案:

答案 0 :(得分:1)

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

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

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

您的对话框可能与此类似:
Customize Toolbar dialog of Internet Explorer 8

答案 1 :(得分:0)

对于一个非常简单的示例,如果没有复杂的逻辑,请在表单上拖动2x listbox + 2x按钮。然后附上以下代码。如您所见,有一种简单的方法可以将一个选定项目从一个列表框移动到另一个列表框。它连接到按钮的点击和列表框双击事件。

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);
        }
    }
} 

然后您可以考虑禁用未选择项目的按钮的其他操作,添加向上/向下按钮或排序项目列表(但是,对于蛾名称列表,您不能使用简单的词法排序 - 您必须使用和排序字典或您自己的类/结构对象)。

最后,要检索所选项目,请使用与此类似的代码:

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

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