2

次のコードがあります。

private void nameTextBox_Leave(object sender, EventArgs e)
{                  
    var names = ConfigurationManager.AppSettings.AllKeys
                        .Where(k => k.StartsWith("name"))
                        .ToArray();

    // Add names to combobox
    comboBox.Items.AddRange(names);
}

問題は、テキストボックスから押すたびにTab、comboBox 要素が倍増し続けることです。ケン、ジョン、ティムがそこにいた場合、もう一度タブを押すと、それが 2 回表示されます。

上記の名前で個別を使用しようとしましたが、毎回新しいインスタンスが作成され、以前のインスタンスが保存されるため、何もしません。名前を追加した直後にコンボボックスを空にすることはできません。これは、コードの後半でボタンクリックで使用されているためです。

私が考えた唯一の代替手段は、グローバル変数を宣言し、その値が0であることを確認してから、コンボボックスに値を挿入するだけで、値が挿入されたら1に変更することでした。しかし、それは良いコーディング方法とは思えません。

これを行うためのより良い方法はありますか?

4

3 に答える 3

6

comboBox.Items.Clear()の前に追加しAddRangeます。したがって、ブロック全体がそうあるべきです。

private void nameTextBox_Leave(object sender, EventArgs e) 
{                   
    var names = ConfigurationManager.AppSettings.AllKeys 
                        .Where(k => k.StartsWith("name")) 
                        .ToArray(); 

    // Add names to combobox 
    comboBox.Items.Clear();
    comboBox.Items.AddRange(names); 
} 
于 2012-09-06T18:39:19.663 に答える
1

完全に理解しているかどうかわかりませんが、入力する前にアイテムをクリアできないのはなぜですか?

comboBox.Items.Clear()
comboBox.Items.AddRange(names);

また、Items ではなく DataSource を使用することもできます。

comboBox.DataSource = names;
于 2012-09-06T18:46:03.267 に答える
0

最初にコンボボックスをクリアするという提案は問題を解決するはずですが、ページの読み込み時にコンボボックスも読み込んでいる場合、これが最善の解決策ではないと思います(実際の問題を隠すだけです)。ページの読み込み時にコンボボックスにデータを入力する場合、そこに Page.IsPostBack チェックを追加します。

例:

if(!Page.IsPostBack)
{
    //Populate the initial values into the combobox
}

そうでない場合は、明確な解決策で問題ありません。

于 2012-09-06T18:50:54.037 に答える