Avatar billede Nicolai Nybegynder
09. december 2004 - 11:21 Der er 16 kommentarer og
1 løsning

Caption værdi på ukendt knap

Jeg har to tekstværdier liggende i mit program. Jeg ønsker nu at "tekstværdi1.caption = tekstværdi2"

Hvis jeg bare gør dette for jeg at vide at der ikke eksiterere en control med dette navn.

Hvad skal jeg gøre anderledes???
Avatar billede peter.erikse Nybegynder
09. december 2004 - 11:26 #1
I tekstbokse hedder det .text og ikke caption
Avatar billede joern Nybegynder
09. december 2004 - 11:32 #2
Hej.

Peter har svaret.

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

M.v.h. Jørn
Avatar billede joern Nybegynder
09. december 2004 - 11:40 #3
Hej Igen.

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

og i samme stil for alle de andre.

M.v.h. Jørn
Avatar billede Nicolai Nybegynder
09. december 2004 - 12:02 #4
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?
Avatar billede Nicolai Nybegynder
09. december 2004 - 12:04 #5
Den giver mig fejlmeddelesen "Object Required"...
Avatar billede Nicolai Nybegynder
09. december 2004 - 12:08 #6
Her er min kode....

    BtnValue = 1
    FilValue = 1
   
Open App.Path & "\XSD01.txt" For Input As #3
    TabValue = "01"
     
            Input #3, CNAME, FNAME
            CurrentButton = "C" & TabValue & BtnValue
            CurrentButton.Caption = CNAME
           

    Close #3
Avatar billede Nicolai Nybegynder
09. december 2004 - 12:09 #7
Den fejler så ved CurrentButton.Caption = CNAME med Fejlmeddeleses "Object Required!"

What to do?
Avatar billede joern Nybegynder
09. december 2004 - 12:17 #8
Hej.

"at påvirke navnet på en knap jeg har i min form"

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?

M.v.h. Jørn
Avatar billede Nicolai Nybegynder
09. december 2004 - 12:25 #9
Hej Jørn,

Det er det ikke...

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"..

Eller hvad?
Avatar billede joern Nybegynder
09. december 2004 - 12:33 #10
Hej.

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

If knCD(index).index = 7 then ....

Med venlig hilsen  Jørn
Avatar billede Nicolai Nybegynder
09. december 2004 - 13:37 #11
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???
Avatar billede joern Nybegynder
09. december 2004 - 13:48 #12
Hej.

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.

Fra VB5 Books Online.

M.v.h.  Jørn
Avatar billede martin_moth Mester
09. december 2004 - 17:37 #13
Dit spørgsmål:

" Findes der virkelig ikke en måde jeg kan få VB til at acceptere VÆRDISTRENG.Caption = "Test"??? "

Kan besvares kort:

Nej - det findes der virkelig ikke.

Øv bøv, sådan er det bare!!!

Du kan bruge kontrolarrays som joern viser det - thats it!
Avatar billede martin_moth Mester
09. december 2004 - 17:40 #14
Dvs. hvis du kar en kontrol, der hedder Command1, kan du IKKE skrive følgende:

"Com" & "mand1".caption = "Hej"



Du kan heller ikke:

Dim strCommand1 as String
strCommand1 = "Command1"
strCommand1.Caption = "Hej"


Sådan er livet - hvis du vil programmere med vb6 i hvert fald ;o)
Avatar billede joern Nybegynder
09. december 2004 - 18:01 #15
Hej martin.

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.

M.v.h.  Jørn
Avatar billede joern Nybegynder
09. december 2004 - 18:37 #16
Hej.

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

Er det det du søger Nicolaj?
Avatar billede Nicolai Nybegynder
10. december 2004 - 08:50 #17
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)
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
Kurser inden for grundlæggende programmering

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