4

フォームにリストボックスとボタンがあります。リストボックスには、House、People、Outdoor の 3 つの要素が含まれています。リストボックスの値を表す 3 つのフォームも作成しました。

ユーザーにリストボックスの項目を強調表示させたいのですが、ボタンをクリックした後、ユーザーが選択したフォームを開きたいと思います。

どうすればこれを達成できますか?私はこのリンクを試しました: ListBox のアイテムをクリックして新しいフォームを呼び出しますが、成功しませんでした。

私が試してみました:

public Select()
        {
            InitializeComponent();
            listBox1.Click += OnListBoxItemClick;
        }


        private void OnListBoxItemClick(object sender, EventArgs e)
        {
            var form2 = new House();
            House.ShowDialog();
        }
  1. これにより、1 つのフォームしか開けなくなります。リストボックスから異なる値で開くように異なるフォームを割り当てるにはどうすればよいですか?
  2. リストボックスの値ではなく、ボタンをクリックした後にフォームを開く方法を教えてください。
4

2 に答える 2

0

を使用しDictionaryて、選択したアイテムの値をフォームにマップするか、フォームを作成できる関数を使用できます (遅延読み込みを確実にするため)。

private Dictionary<string, Func<Form>> formMapping 
    = new Dictionary<string, Func<Form>>()
    {
        {"House", ()=> new House()},
        {"People", ()=> new People()},
        {"Outdoor", ()=> new Outdoor()},
    };

その後、クリック イベント ハンドラーでそのマッピングを使用して、選択した値をフォームに変換できます。

private void button1_Click(object sender, EventArgs e)
{
    Form newForm = formMapping[listBox1.SelectedValue]();
    newForm.ShowDialog();
}
于 2013-08-05T19:07:49.797 に答える