4

我的表单上有一个列表框和一个按钮。列表框包含 3 个元素:房屋、人物、户外。我还创建了 3 个表单来表示列表框中的值。

我想用户突出显示列表框中的项目,然后单击按钮后我想打开用户选择的表单。

我怎样才能做到这一点?我试过这个链接:Calling new Form by click an item on the ListBox但没有任何成功。

我努力了:

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


        private void OnListBoxItemClick(object sender, EventArgs e)
        {
            var form2 = new House();
            House.ShowDialog();
        }
  1. 这只会让我打开一个表格。如何分配不同的表单以使用列表框中的不同值打开?
  2. 我想点击按钮后打开表单,而不是列表框中的值,如何实现?
4

2 回答 2

4

您将需要使用 ListBox 的SelectedItem属性:

private void button1_Click(object sender, EventArgs e)
{
    switch (listBox1.SelectedItem.ToString())
    {
        case "House":
            House h = new House();
            h.ShowDialog();
            break;
        case "People":
            People p = new People();
            p.ShowDialog();
            break;
        case "Outdoor":
            Outdoor o = new Outdoor();
            o.ShowDialog();
            break;
    }

}
于 2013-08-05T18:57:02.117 回答
0

您可以使用 aDictionary将所选项目中的值映射到表单,或者更好的可以创建表单的函数(以确保延迟加载)。

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

然后,您可以在 click 事件处理程序中使用该映射将所选值转换为表单:

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