2

1つのフォームに2つのコンボボックスがあります。

combobox2のリストが更新されたときに、combobox1で選択した値を変更したいのですが。

例:ComboBox1には携帯電話会社の名前があり、ComboBox2にはその会社のすべての携帯電話のリストが含まれています。

4

3 に答える 3

3

電話のモデルを製造元に関連付ける辞書があるとします。

Dictionary<string, string[]> brandsAndModels = new Dictionary<string, string[]>();

public void Form_Load(object sender, EventArgs e)
{
    brandsAndModels["Samsung"] = new string[] { "Galaxy S", "Galaxy SII", "Galaxy SIII" };
    brandsAndModels["HTC"] = new string[] { "Hero", "Desire HD" };
}

左側のコンボ ボックスに表示されるアイテムを次のように取得できます。

foreach (string brand in brandsAndModels.Keys)
    comboBox1.Items.Add(brand);

これは、フォームのLoadイベントなどで 1 回だけ行います。注:brandsAndModels後でアクセスする必要があるため、ディクショナリはローカル変数ではなく、インスタンス変数である必要があります。

次に、イベントのイベント ハンドラーを割り当て、SelectedIndexChanged2 番目のコンボ ボックスの項目を選択したブランドの配列の項目に置き換える必要があります。

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    comboBox2.Items.Clear();

    if (comboBox1.SelectedIndex > -1)
    {
        string brand = brandsAndModels.Keys.ElementAt(comboBox1.SelectedIndex);
        comboBox2.Items.AddRange(brandsAndModels[brand]);
    }
}

これがすべてデータベースからのものである場合、あなたの質問へのコメントでリンクした質問への回答で説明されているように、データ バインディングを使用する方がはるかに優れています。

于 2012-12-19T14:11:42.197 に答える
2

SelectedIndexChangedそれを達成するには、コンボボックスのイベントを処理する必要があります

于 2012-12-19T14:03:23.127 に答える
2

あなたが新しく見えるので、私はあなたに段階的に説明します。

  1. ComboBox1を右クリックして、プロパティを選択します。
  2. これにより、プロパティパネルが開きます。
  3. プロパティパネルの上部からイベントボタンを選択します。
  4. コンボボックスに関連するすべてのイベントのリストが表示されます。
  5. このリストから、SelectedIndexChangedをダブルクリックします。
  6. private void comboBox1_SelectedIndexChanged(object sender、EventArgs e){}が作成されます

この後、次のコードを使用できます。

Dictionary<string, string[]> models = new Dictionary<string, string[]>();
public Form1()
{
    InitializeComponent();

    //initializing combobox1
    comboBox1.Items.Add("Select Company");
    comboBox1.Items.Add("HTC");
    comboBox1.Items.Add("Nokia");
    comboBox1.Items.Add("Sony");

    //select the selected index of combobox1
    comboBox1.SelectedIndex = 0;

    //initializing model list for each brand
    models["Sony"] = new string[] { "Xperia S", "Xperia U", "Xperia P" };
    models["HTC"] = new string[] { "WildFire", "Desire HD" };
    models["Nokia"] = new string[] { "N97", "N97 Mini" };
}

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    comboBox2.Items.Clear();

    if (comboBox1.SelectedIndex > -1)
    {
        string brand = comboBox1.SelectedItem.ToString();
        if(brand != "" && comboBox1.SelectedIndex > 0)
            foreach (string model in models[brand])
                comboBox2.Items.Add(model);
    }
}
于 2012-12-19T15:02:19.687 に答える