将通用列表项添加到Winforms的列表框c#

时间:2012-12-10 10:21:41

标签: c# winforms generics listbox

您好我正在尝试将项目添加到通用列表中。然后在按钮上单击通用列表项应该转移到我的listbox1。但是,每次单击按钮时都会添加它们。

我尝试使用if命令, 有时像这样

 if (listBox1.Items.Count == 0)
 {
     // this contained everything I am now adding under initialize component)
 }

但是这产生了错误。索引值不能为0。 所以从本质上讲,这是有效的。但我不希望每次点击都继续添加项目。

public Form1()
{
    InitializeComponent();
    list.Add("Januari");
    list.Add("Februari");
    list.Add("March");
    list.Add("April");
    list.Add("May");
    list.Add("June");
    list.Add("July");
    list.Add("August");
    list.Add("September");
    list.Add("Oktober");
    list.Add("November");
    list.Add("December");
}

private IList<string> list = new List<string>();

private void button1_Click(object sender, EventArgs e)
{
    for (int index = 0; index < list.Count; index++)
    {
        listBox1.Items.Add(list[index]);
    }

    int mnr = Convert.ToInt32(textBox1.Text);
    string mnm = Convert.ToString(listBox1.Items[mnr - 1]);
    textBox2.Text = mnm;      
}

2 个答案:

答案 0 :(得分:1)

这只是@Kami答案的替代方案,如果你不在其他任何地方使用IList<string> list,那么只需将这些项目直接添加到列表框中:

public Form1()
{
    InitializeComponent();

    // This is only called once.
    InitializeListBox();
}

private void InitializeListBox()
{
    listBox1.Items.Add("Januari");
    listBox1.Items.Add("Februari");
    listBox1.Items.Add("March");
    listBox1.Items.Add("April");
    listBox1.Items.Add("May");
    listBox1.Items.Add("June");
    listBox1.Items.Add("July");
    listBox1.Items.Add("August");
    listBox1.Items.Add("September");
    listBox1.Items.Add("Oktober");
    listBox1.Items.Add("November");
    listBox1.Items.Add("December");
}

private void button1_Click(object sender, EventArgs e)
{
    int mnr = Convert.ToInt32(textBox1.Text);
    string mnm = Convert.ToString(listBox1.Items[mnr - 1]);
    textBox2.Text = mnm;
}

答案 1 :(得分:0)

你可以在这做两件事。

首先,选项是在加载列表之前添加对clear()的调用。这将删除现有项目并重新插入。

    private void button1_Click(object sender, EventArgs e)
    {
        listBox1.Items.Clear();

        for (int index = 0; index < list.Count; index++)
        {

            listBox1.Items.Add(list[index]);
        }

        int mnr = Convert.ToInt32(textBox1.Text);
        string mnm = Convert.ToString(listBox1.Items[mnr - 1]);
        textBox2.Text = mnm;
    }

或者,可能更好的解决方案是将加载移动到init函数中。由于每个表单只需要加载一次数据,因此这是更好的解决方案。

    public Form1()
    {
        InitializeComponent();
        Init();
    }

    private void Init()
    {
        list.Add("Januari");
        list.Add("Februari");
        list.Add("March");
        list.Add("April");
        list.Add("May");
        list.Add("June");
        list.Add("July");
        list.Add("August");
        list.Add("September");
        list.Add("Oktober");
        list.Add("November");
        list.Add("December");

        listBox1.Items.Clear();

        for (int index = 0; index < list.Count; index++)
        {

            listBox1.Items.Add(list[index]);
        }
    }

    private IList<string> list = new List<string>();

    private void button1_Click(object sender, EventArgs e)
    {
        int mnr = Convert.ToInt32(textBox1.Text);
        string mnm = Convert.ToString(listBox1.Items[mnr - 1]);
        textBox2.Text = mnm;
    }