c # - Sådan oprettes dynamisk et objektnavn på en formular

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg er klar over, at dette er blevet delvist dækket, selvom jeg tror, ​​at det problem, jeg har, ikke er blevet fuldt ud dækket:


Jeg har en begivenhed, der skaber en genstand for en Form, når begivenheden opstår:


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

    }


Selvom jeg skal oprette mange objekter af Form1 afhængigt af "selectedNodeText" strengværdien.


For eksempel: Hvis "selectedNodeText" var == "Cars", vil jeg gerne have navnet på Form1 for at blive kaldt noget som "Form1ObjectCars" og hvis det var "Dogs" ville objektnavnet være "Form1ObjectDogs".

Bedste reference


Du kan bruge en Dictionary<TKey,TValue> klasse til dette, for eksempel [15]


//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"];

Andre referencer 1


Det lyder som om du bruger samme formular, men vil bare title eller billedtekst det anderledes.


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


Eller for at undgå at sende det til formularen:


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