在列表框中选择项目后打开新表单

时间:2013-08-05 18:46:32

标签: c# winforms

我的表单上有一个列表框和一个按钮。列表框包含3个元素:House,People,Outdoor。 我还创建了3个表单来表示列表框中的值。

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

我怎样才能做到这一点?我试过这个链接:Calling new Form by clicking 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. 我希望单击按钮后打开表单,而不是列表框中的值,如何实现呢?

2 个答案:

答案 0 :(得分: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;
    }

}

答案 1 :(得分:0)

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

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();
}