Visual basic er ret tolerant en del steder. Du kan godt skrive
tekstværdi1 = tekstværdi2 - så regner VB med at det ikke er baggrundsfarven men teksten du vil kopiere. Naturligvis er det korrekt at skrive tekstværdi1.text = tekstværdi2.text
Vil du kopiere indholdet fra en tekstboks til en label kan du skrive label1 = tekstværdi2
Men det korrekte er: label1.caption = tekstværdi2.text
Du skrev forresten, at det er en knap. Control1.caption = text1.text
Det er en god ide at navngive sine kontroller (alle elementer er kontroller) således at det af navnet fremgår, hvilken slags kontrol der er tale om. Jeg prøver at gøre navnene korte - gerne under 8 tegn. så min praksis er:
tekstbokse txtdata() ,indekserede labels labdata() ,også indekserede (så kan du skifte sprog) listebokse lstdata combobokse comdata scrollpanel scrtid , eller hvad scroll-panelet nu indstiller gridkontrol grddata knapper kngem
Hej Jeg skal bare lige sikre mig at forståelsen er fuldendt:
Jeg sammensætter en værdi af nogle forskellige informationer. Lad os kalde værdien for NewValue som indeholder informationen: "ABCDE01". Jeg ønsker nu at påvirke navnet på en knap jeg har i min form. Jeg kender ikke navnet på knappen, men jeg ved at kanppen har navnet der er i NewValue (ABCDE01).
Jeg ønsker derfor at sætte ABCDE01.Caption = "Nyt navn til knap"..
Men det virker ikke når jeg skriver NewValue.Caption = "Nyt navn til knap". Skriver jeg derimod ABCDE01.Caption = "Nyt navn til knap" går det fint. Men så er den jo ikke dynamisk hvis jeg ønsker at ændre navn på mere end én knap...
Er det klart? Og har I svaret allerede eller hvad?
Du kan mig bekendt ikke ændre kontrollernes navne i runtime. Ud fra din beskrivelse opfatter jeg, at der er det du vil. Hvis det er rigtigt, så hvorfor?
Lad mig forsøge at forklare den helt konkrete situation:
Jeg har 10 knapper i min form. Det hedder alle sammen C01x hvor X er et tal fra 1 til 10. EN af knapperne hedder f.eks. C014.
Jeg ønsker nu at påvirke Caption (text) på én af knapperne. Navnet på den knap jeg ønsker at ændre kommer fra en sammensat værdi der hedder "CD01" & NEWVALUE. NEWVALUE er et tal mellem 1 og 10. Sætter jeg disse to værdier sammen i én ny værdi (f.eks. CurrentCutton) får denne f.eks. værdien "CD014".
Jeg laver derefter en linje der hedder CurrentButton.Caption = "TEST". Dermed skelle knappen med navnet CD014 (som p.t. er værdien af CurrentButton) gerne ændre Caption til "Test"..
Du skal lave dine knapper som et control-array. Så har hver knap et index, og det er langt lettere at skifte caption på den.
Slet de 9 knapper, markér den tilbageblevne og tryk CTRL + C Tryk dernæst CTRL+V Så spørger VB om du vil oprette et ControlArray, og det bekræfter du. En kopi af knappen sættes i øverste ventre hjørne. Du kan så flytte den til den ønskede position. Tryk CTRL+V igen og knap nr. 3 indsættes. Den får index 2, fordi den første har index 0.
Når du med kode vil gøre noget ved en af disse knapper, kan du henvise til den med dens index. knCD(7).caption = ....
Koden for hvad der skal ske når du klikker på en knap bliver også lettere, den skal kun skrives én gang, hvis der skal ske det samme (med forskellige parametre). For at identificere hvilken knap der klikkes på skriver du
Jeg kan godt følge dit svar - tak for det...Men jeg bryder mig ikke om måden, da jeg mister lidt føling. Findes der virkelig ikke en måde jeg kan få VB til at acceptere VÆRDISTRENG.Caption = "Test"??? Har det ikke noget med formatteringen af værdistrengen at gøre eller noget lign???
Jeg bruger indeksering meget uden at synes, at jeg mister føling :-)
Jeg har aldrig brugt 'name' Prøv at pusle lidt med det:
Syntax object.Name .. The object placeholder represents an object expression that evaluates to an object in the Applies To list. If object is omitted, the form associated with the active form module is assumed to be object. Remarks The default name for new objects is the kind of object plus a unique integer. For example, the first new Form object is Form1, a new MDIForm object is MDIForm1, and the third TextBox control you create on a form is Text3. An object's Name property must start with a letter and can be a maximum of 40 characters. It can include numbers and underline (_) characters but can't include punctuation or spaces. Forms can't have the same name as another public object such as Clipboard, Screen, or App. Although the Name property setting can be a keyword, property name, or the name of another object, this can create conflicts in your code. You can use a form's Name property with the Dim statement at run time to create other instances of the form. You can't have two forms with the same name at design time. You can create an array of controls of the same type by setting the Name property to the same value. For example, when you set the name of all option buttons in a group to MyOpt, Visual Basic assigns unique values to the Index property of each control to distinguish it from others in the array. Two controls of different types can't share the same name. Note Although Visual Basic often uses the Name property setting as the default value for the Caption, LinkTopic, and Text properties, changing one of these properties doesn't affect the others.
Jeg tror spørgeren mener noget andet. Men det er ikke altid let at gennemskue spørgsmål.
Jeg tror han vil teste på navnet på en command-kontrol, og når den rigtige er fundet, så tildele kontrollen caption en værdi. Derfor tænkte jeg man kunne sammenligne kontrollens 'name' med den variable. Men spørgeren er nok gået fra PC'en p.t.
Dette fungerer når man i tekstfeltet skriver 01 - 02 eller 03
Private Sub Text1_DblClick() If kn01.Name = "kn" & Text1.Text Then kn01.Caption = "Olsen" If kn02.Name = "kn" & Text1.Text Then kn02.Caption = "Jensen" If kn03.Name = "kn" & Text1.Text Then kn03.Caption = "Nielsen" End Sub
Tak for jeres aktivitet, mens jeg har været væk... :o)
Hmmmm. Øv... Jeg er åbenbart stødt ind i en VB begrænsning jeg ikke kendte til.. Fordi det er præcis det som Martin beskriver at jeg er interesseret i. Så når nu det ikke kan lade sig gøre, må jeg anvende din løsning Jørn (kontrolarrays).. Selvom jeg lige skal lave nogle forskellige ting om, og tænke lidt anderledes..
Måske kan jeg bruge det sidste forslag du (Jørn) kom med omkring IF sætninger i forhold til control navnet.
Tak for hjælpen, gutter.. Selvom jeg ikke fik det som jeg ville... :o( Bad luck... :-O)
Synes godt om
Ny brugerNybegynder
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.