2012-12-10 67 views
2

嗨我试图将项目添加到通用列表。然后在一个按钮上单击通用列表项应该被传输到我的列表框1。然而,这个工作,每次我点击按钮,它不断添加它们。将通用列表项添加到Winforms的列表框c#

我尝试使用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;  
} 
+0

哪里是你的列表中声明? – ryadavilli

+0

在重新插入它们之前清除listBox1中的项目。 – Boomer

+0

你必须在'Form1()'构造函数中添加字符串。 – adatapost

回答

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