Avatar billede brobaek Nybegynder
08. februar 2004 - 14:52 Der er 8 kommentarer

Finde control.name

Jeg har en række kontroller, hvor jeg gerne vil ændre på højde etc. De skal alle ændres til samme værdier.

Pt. ser koden sådan ud:

label1.height = 100
label1.width = 100
label2.height = 100
label2.height = 100

etc.

Kan jeg ikke lave en funktion/sub, således jeg kan skrive:

standarddiser(label1)

og denne

public sub standarddiser(kontrol as object)
  kontrol.height=100
  kontrol.width=100
end sub

Pt. gør jeg det ved at løbe alle kontroller igennem vha.:

for i = 0 to frmMain.controls.count-1
  if frmmain.controls.count = "something" then
    DetteErKontrollen = i
  end if
next i

control(DetteErKontrollen).height=100
etc.

Men, dette gennemløb tager relativ meget tid - der må da være en smartere metode som jeg har overset...

Mvh
Martin
Avatar billede brobaek Nybegynder
08. februar 2004 - 15:27 #1
Lige en lille fejl - for/next løkken til sidst skulle have været

for i = 0 to frmMain.controls.count-1
  if frmmain.controls(i).name = "something" then ***RETTET***
    DetteErKontrollen = i
  end if
next i
Avatar billede kabbak Professor
08. februar 2004 - 16:47 #2
må kunne gøres sådan

for i = 0 to frmMain.controls.count-1
  if frmmain.controls(i).name = "something" then ***RETTET***
  control(i)..height = 100
  control(i)..width = 100
  end if
next i
Avatar billede kabbak Professor
08. februar 2004 - 16:48 #3
hov fjern lige de ene punktum i
control(i)..
Avatar billede brobaek Nybegynder
08. februar 2004 - 17:00 #4
Jo, det er klart. Men det jeg efterlyser er lidt en funktion ala:

control("Something").height=100

Jeg skal ofte ændre på controllerne, så løkken skal rimelig ofte køres. Der er en del kontroller på formen, så der er en irreterende forsinkelse.

Dvs. jeg vil ikke optimere løkken, men derimod undgå løkken.
Avatar billede kabbak Professor
08. februar 2004 - 17:36 #5
Hvis det kun er Label du vil ændre, så gøres det sådan.
Jeg tror ikke du kan undgå løkken.

For Each c In Form1.Controls
If TypeName(c) = "Label" Then
c.Height = 500
c.Width = 500
End If
Next
Avatar billede brobaek Nybegynder
08. februar 2004 - 18:02 #6
Det er forskellige controls (faktisk user controls).

I bund og grund kan man jo skrive:
label1.visible=true

Så bør man jo næsten også, på en eller anden måde, kunne referere til en control uden en løkke, ala:
[pseudo kode]
dim ss as string
ss="label1"
ss.visible=true
[/pseudo kode]

Men iøvrigt er for each løkken lidt pænere end "for i = 0 to controls.count"-løkken.
Avatar billede brobaek Nybegynder
08. februar 2004 - 18:03 #7
... som jeg iøvrigt alligevel skal bruge, da jeg jo skal vide værdien af i :o)
Avatar billede venne Nybegynder
10. februar 2004 - 13:32 #8
Jeg har lige prøvet dette i et projekt:

Private Sub Form_Load()
  standarddiser Label1
End Sub

Public Sub standarddiser(kontrol As Object)
  kontrol.Height = 100
  kontrol.Width = 100
End Sub


Det kører tilsyneladende godt nok - er det ikke det du vil?
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