2

您好我正在尝试将这些项目添加到通用列表中。然后在一个按钮上单击通用列表项应该转移到我的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;      
}
4

2 回答 2

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;
}
于 2012-12-10T10:42:56.297 回答
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;
    }
于 2012-12-10T10:31:05.993 回答