第一次在這里發帖,如果我在帖子中犯了什么錯誤,請告訴我,以便我可以修正它
。因此,我正試圖用類來處理大部分的代碼,我想做的一件事是讓一個類來處理所有的表單實體的打開和生成。在已經存在的實體上做一個 簡而言之,我試圖做出類似的東西。
(我知道類似的東西是不可能的,但我認為這是最簡單的方式來解釋我所尋求的東西。我做的一個變通方法是讓代碼將每個表單生成一個開關,然后只發送它們的編號,所以如果我找不到更好的解決方案,我就會用這個方法,但我想學習一種 "適當的/更干凈的 "方法來實作這個目標)
[Edit: I realized that this is irrelevant for my project cuz I can just ready up every single Form on login, but I still hope to know how to do this if any of yall can show me how to/where to read]/p>
uj5u.com熱心網友回復: 我不確定我是否理解正確,但我認為你需要一個工廠類。
這樣你就可以通過名字來創建你的表單了。
uj5u.com熱心網友回復: 下面是一個使用Reflection方法的簡單例子: 下面是另一個版本,它檢查表單是否已經打開:
標籤:.Show();很簡單,因為我知道它們被創建的順序,我可以直接Form _form = Application. .OpenForms[i];來抓取實體,但是當它還沒有被創建時,我找不到處理它的方法,我讀了一些關于它的文章,但是沒有找到真正適合我想做的事情,一些關于反射的東西似乎是正確的路徑,但是不能讓它作業,所以在這個問題上的一些亮點將是非常感激的。
static public bool MakeForm(string name)
{
name _name = new name()。
_name.Show()。
public static class Factory
{
public static Form Create title">創建(字串 name)。
{
switch (name)
{
case "FormA":
return new FormA();
case "FormB"/span>:
return new FormB();
}
}
Factory.Create("FormA"/span>).Show();
private void button1_Click(object sender, e)。
{
Form f2 = TryGetFormByName("Form2")。
if (f2 != null)
{
f2.Show()。
}
}
public Form TryGetFormByName(string formName)。
{
var formType = System.Reflection.Assembly.GetExecutingAssembly().GetTypes()
.Where(T => (T.BaseType == typeof(Form)) && (T.Name == formName)
.FirstOrDefault()。
return formType == null ? null : (Form)Activator.CreateInstance(formType)。
}
publicForm TryGetFormByName(string formName)
{
//查看是否已經打開:
foreach (Form frm in Application.OpenForms)
{
if (frm.Name == formName)
{
return frm;
}
}
//它不是,所以嘗試創建一個:。
var formType = System.Reflection.Assembly.GetExecutingAssembly().GetTypes()
.Where(T => (T.BaseType == typeof(Form)) && (T.Name == formName)
.FirstOrDefault()。
return formType == null ? null : (Form)Activator.CreateInstance(formType)。
}
