我的问题的简要描述:
所以我在考虑做什么以及我尝试了什么:
我想使用组合框中所选项目的名称,并将其用作对象(UserForm)名称。 (还要在创建前检查它是否已存在) - >显然,在C#中不可能将字符串变量用作对象名称
我搜索了字典,但是我可以在那里存储整个用户表单吗?
此外,我还考虑在开始时创建所有15-20个用户表单,然后循环显示它们并显示或隐藏它们。
有什么想法吗?
答案 0 :(得分:2)
这是一个缓存问题。您想要缓存表单。
首先,您需要一个缓存容器,例如
var cache = new List<UserForm>();
然后,当需要表单时,您需要一种特殊方法来搜索缓存并在需要时添加到缓存中。因为有多种形式,所以你需要在这里使用泛型:
T GetOrCreateForm<T> where T: UserForm, new()
{
UserForm f = cache.OfType<T>().FirstOrDefault(); //Search cache
if (f == default(T)) //If not found,
{
f = new T(); //Create it anew
cache.Add(f); //and add it to the cache
}
return f; //return the form we just created/retrieved
}
然后,您将调用此方法,传递所需形式的类型:
var form1 = GetOrCreateForm<Form1>();
form1.Show();
以上假设列表中的每一行都有一种形式(一个类)。如果你实际上有一个共同的表单类,但它们通过其他东西区分(例如,每个表单可能具有在运行时设置的唯一Name
属性),那么你需要一个字典来分辨表单:
var cache = new Dictionary<string, UserForm>();
UserForm GetOrCreateForm(string name)
{
UserForm f;
if (!cache.TryGetValue(name, out f))
{
f = new UserForm { Name = name };
cache.Add(name, f);
}
return f;
}
var myForm = GetOrCreateForm("SomeUniqueName");
myForm.Show();