列表框作为表单选择器

本文关键字:表单 选择器 列表 | 更新日期: 2023-09-27 18:26:34

如何有效地检测Listbox的哪个元素被选中并切换到相应的表单?目前,我是这样做的:

public static Form GetForm(string name)
{
    switch (name)       //name - Selected item in listbox as string
    {
        case "Преломление Света":
            return new Light();
        case "Закон Ома":
            return new OHMsLaw();
        default:
            return null;
    }
} 

它运行良好,但我怀疑我的解决方案是否正常。

列表框作为表单选择器

我会将表单存储在字典中,例如:

ConcurrentDictionary<string, Form> _forms;
void InitDictionaries(){
    _forms = new ConcurrentDictionary<string, Form>();
    _forms.TryAdd("Преломление Света", new Light()>;
    _forms.TryAdd("Закон Ома", new OHMsLaw()>;
    //...
}

所以,当涉及到选择时,我可以使用:

public Form GetForm(string name)
{
    Form toShow;
    _forms.TryGetValue(name, out toShow);
    return show;   
} 

此字典存储表单实例。


另一种方法是存储派生窗体的类型,但如果您想存储现有窗体,这不是一个好的解决方案,因为它会创建新实例。

ConcurrentDictionary<string, Type> _forms;

你可以这样添加类型:

_forms.TryAdd("Закон Ома", typeof(OHMsLaw));

你可以这样使用:

public Form GetForm(string name)
{
    Type type;
    _forms.TryGetValue(name, out type);
    if (type != null)
        return Activator.CreateInstance(type) as Form;
    return null;
}