2012-03-10 90 views
0

我知道这已经部分覆盖,但我相信这个问题我还没有被完全覆盖:如何动态地创建表格的对象名称

我有一个创建一个Form时的对象的事件事件发生:

private void hostView_AfterSelect(object sender, TreeViewEventArgs e) 
    { 
     string selectedNodeText = e.Node.Text; 
     if (selectedNodeText == "Internal Hosts" || selectedNodeText == "External Hosts") 
     { 
      // ignore, parent nodes have no corrosponding tab! 
     } 
     else 
     { 
      Form1 Form1Object = new Form1(selectedNodeText); 
      Form1Object.Show(); 
     } 

    } 

虽然我需要根据"selectedNodeText"字符串值创建的Form1许多对象。

例如:如果"selectedNodeText"== "Cars"我想的Form1对象名称被称为像"Form1ObjectCars",如果这是"Dogs"对象名称将是"Form1ObjectDogs"

+2

你想在Form1变量有名称Form1ObjectCars或Form1ObjectDogs?我没有看到任何理由这样做一个私人变量...请告诉我们你想达到什么:) – digEmAll 2012-03-10 14:12:28

回答

0

可以使用Dictionary<TKey,TValue>类此,例如

//Initialize 
Dictionary<string, Form1> forms = new Dictionary<string, Form1>(); 

//Add objects 
if(selectedNodeText == "foo") 
    forms.Add("foo", new Form1("foo")); 

if(selectedNodeText == "bar") 
    forms.Add("bar", new Form1("bar")); 

//Get objects 
Form1 bar = forms["bar"]; 
+0

对不起,但整个想法是,我可以有一个Form1变量对象名称,但你已经在你的例子中指定了“bar” – user1261072 2012-03-10 14:26:27

0

这听起来像你正在使用相同的形式,而只是希望标题或标题不同的看法。

string caption = string.Format("Form1Object{0}", selectedNodeText); 
Form1 Form1Object = new Form1(caption); 
// in the Form's constructor you are doing a this.Text = caption? 
Form1Object.Show(); 

或避免其传递到窗体:

Form1 Form1Object = new Form1(); 
Form1Object.Text = string.Format("Form1Object{0}", selectedNodeText); 
Form1Object.Show();