2

こんにちは、項目を汎用リストに追加しようとしています。次に、ボタンをクリックすると、一般的なリスト項目がリストボックス1に転送されます。これは機能しますが、ボタンをクリックするたびに追加し続けます。

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

ここでできることは 2 つあります。

最初のオプションは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 関数に移動することです。データはフォームごとに 1 回だけロードする必要があるため、これがより適切なソリューションです。

    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 に答える