Avatar billede zuran Nybegynder
10. april 2009 - 21:42 Der er 15 kommentarer og
1 løsning

Forbindelse til control der indsættes under kørsel

Hej.

Er der nogle, der kan hjælpe mig med, hvordan man får forbindelse til controls, der bliver indsat under kørsel af applikation?

F.eks.

TextBox tekstfelt = new Textbox();
tekstfelt.Location = new Point(0, 0);

Controls.Add(tekstfelt);

Lad os sige, at overstående 3 linier bliver kørt en masse gange, hvilket vil skabe en hel masse tekstbokse. Hvordan kan jeg så f.eks sætte tekstindholdet af tekstboksene, ved klik på en helt andet knap?

Og nu ikke noget med AllRecentlyAddedTextBoxes.Text = "Tekst"; (selvom det begreb ikke eksisterer).

Tak på forhånd.
Avatar billede arne_v Ekspert
10. april 2009 - 21:47 #1
Enten kan du gemme en ref til dine nye kontroller eller saa kan du iterere over Controls og finde dem.
Avatar billede zuran Nybegynder
10. april 2009 - 21:55 #2
Hej og tak for dit hurtige indlæg.

Jeg holder mig til en reference af den indsatte control. Jeg ved blot ikke helt, hvilken metode jeg skal anvende, og hvordan jeg via refencen skal få forbindelse til controleren.

Jeg har kigget på noget med controlerens navn og id, og så tænkt på en forløbende variabel, der så sørger for, at de indsatte controlere får unikke (forskellige) navne.

Men lad os antage, at første indsatte controler får navnet "insertedControl1", hvordan skal jeg så få forbindelse til den?

Jeg kan ikke jo bare i selve koden skrive insertedControl1.Text = "Tekst";

Skal jeg på en måde løbe alle controls igennem og tjekke navn? Eller findes der et mere simpelt begreb til at få fat i en control med bestemt navn?

Et kort og overskueligt eksempel ville være perfekt :-)
Avatar billede arne_v Ekspert
10. april 2009 - 22:09 #3
Hvis du vil gemme en ref saa:

Dictionary<string, TextBox> refs;
...
TextBox tb77 = new TextBox();
refs.Add("tb77", tb77);
...
refs["tb77"].Text = "xxxx";

Hvis du vil slaa den op saa:
- saetter du Name property paa TextBox
- naar du skal bruge den saa itererer du over Controls og finder den (*)
- du bruger den fundne

*) Der er muligvis allerede en faerdig Find metode til det.
Avatar billede zuran Nybegynder
10. april 2009 - 22:26 #4
Så får jeg fejlen:

Use of unassigned local variable 'refs'
Avatar billede arne_v Ekspert
10. april 2009 - 22:39 #5
Et eller andet sted skal der laves:

refs = new Dictionary<string, TextBox>();

for at refs skal kunne bruges overalt saa skal den nok vaere en instans variabel og ikke en lokal variabel.
Avatar billede zuran Nybegynder
10. april 2009 - 22:55 #6
Så får jeg fejlen:

Objektreferencen er ikke indstillet til en forekomst af et objekt.
Avatar billede zuran Nybegynder
10. april 2009 - 22:55 #7
I det den prøver at at tilføje referencen (refs.Add.....)
Avatar billede arne_v Ekspert
10. april 2009 - 23:03 #8
Du mangler stadigvaek:

refs = new ....

saa !
Avatar billede zuran Nybegynder
11. april 2009 - 17:13 #9
Jeg prøvede at undlade den, da det gav endnu flere fejl, men ok.

Fejlen:

Invalid token '=' in class, struct, or interface member declaration
Invalid token '(' in class, struct, or interface member declaration
Avatar billede zuran Nybegynder
11. april 2009 - 17:15 #10
Ah min fejl.

refs = new Dictionary<string, TextBox>(); er nu placeret under ved tryk på en knap, og Dictionary<string, TextBox> refs; er placeret øverst oppe.

Det virker, tak for hjælpen! Smid et svar =)
Avatar billede zuran Nybegynder
11. april 2009 - 17:29 #11
Tja, der var jeg måske lidt for hurtig.

Nu opretter den jo et nyt dictionary for hvert klik på knappen, hvorved man kun har mulighed for at få forbindelse til den sidst oprettede control..
Avatar billede arne_v Ekspert
11. april 2009 - 18:03 #12
Enten:

på klasse niveau

private Dictionary<string, TextBox> refs = new Dictionary<string, TextBox>();

eller

på klasse niveau

private Dictionary<string, TextBox> refs;

og i constructor

refs = new Dictionary<string, TextBox>();
Avatar billede zuran Nybegynder
11. april 2009 - 19:15 #13
Ja, nu har jeg så private Dictionary<string, TextBox> refs; på klasse niveau og refs = new Dictionary<string, TextBox>(); oppe i constructor.

Det ser så ud til, at ordet "private" i private Dictionary<string, PictureBox> refs; får alt neden under til at fucke op osv.

Fejl:

Error    1    Invalid token '=' in class, struct, or interface member declaration
Error    2    Invalid token '(' in class, struct, or interface member declaration
Error    3    } expected
Error    4    Invalid token '(' in class, struct, or interface member declaration
Error    5    Invalid token ',' in class, struct, or interface member declaration
Error    6    Invalid token ')' in class, struct, or interface member declaration
Error    7    Invalid token '=' in class, struct, or interface member declaration
Error    8    Method must have a return type
Error    9    Type expected
Error    10    Invalid token '=' in class, struct, or interface member declaration
Error    11    Invalid token ';' in class, struct, or interface member declaration
Error    12    Invalid token '=' in class, struct, or interface member declaration
Error    13    Method must have a return type
Error    14    Type expected
Error    15    Invalid token '(' in class, struct, or interface member declaration
Error    16    Invalid token ')' in class, struct, or interface member declaration
Error    17    Invalid token '(' in class, struct, or interface member declaration
Error    18    Invalid token '=' in class, struct, or interface member declaration
Error    19    Invalid token '+' in class, struct, or interface member declaration
Error    20    Expected class, delegate, enum, interface, or struct
Error    21    Identifier expected
Error    22    Type or namespace definition, or end-of-file expected
Error    23    Type or namespace definition, or end-of-file expected
Avatar billede arne_v Ekspert
11. april 2009 - 19:27 #14
med op klasse niveau mener jeg:

... class ...
{
    private Dictionary<string, TextBox> refs ...
    ...
}
Avatar billede zuran Nybegynder
11. april 2009 - 19:37 #15
Ah ja, selvfølgelig.

Så virker det sgu nu. Tak for hjælpen!

Vil du lægge et svar?
Avatar billede arne_v Ekspert
11. april 2009 - 19:43 #16
kommer her
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester