16. december 2003 - 16:39Der er
6 kommentarer og 1 løsning
dynamisk add af komponenter på form
Hej! mitspg er følgende: jeg har et String array med et antal elementer, disse elementer repræsentere f.eks processer der skal overvåges eller database stuff (ikke vigtigt blot for historik)
Nu kunne jeg godt tænke mig at jeg kunne loope igennem et sådan array og for hvert element adde f.eks en cirkel på min form i et defineret område(kunne også være noget andet) Det er sådan rimeligt at komme til, men hvad jeg studser over er at jeg gerne ville have properties på disse objekter med f.eks fillcolor m.m samt en label.
Det skulle være tænkt som at hvis nu en ting der bliver overvåget går ned skal den være rød, ellers skal den være grøn og er den bare f.eks idle skal den være blå eller sort.
Jeg havde i tankerne at lave en komponent med de egenskaber jeg gerne ville have. Men jeg er ikke inde i teknikken omkring dynamisk placering af objekter på forms samt måske der findes en lettere måde at gøre det på en selv udvikle en activeX
Jeg ville nok vælge at gøre det på følgende måde: 1. Lave en ny variable type f.eks. Private Type KomponentTing Backcolor as ole_color Left as long Top as long 'osv... End Type
2. Opret, inde i Visual Basic, én af hver af de objekter du vil kunne oprette dynamisk. Disse objekter du opretter skal have et index på 0.
3. I den variabel (KomponentTing) skal du have indlæst de værdier som du vil angive for de objekter der skal oprettes - det kan f.eks. være at de bliver læst fra en textfil eller som en database som du nævner.
4. Dernæst kan du dynamisk oprette objekter ved at læse den brugerdefinierede variabel som du har oprettet. F.eks. hvis du vil oprette en knap kaldet "cmdKnap" kan du bruge noget lig følgende:
Dim NytIndeks as Integer NytIndeks = cmdKnap.Count
hej Sion> jeg forsøger mig med følgende kode i en form. med en shape som er sat til circle, men den brokker sig over manglende object
Private Type mincircle fillcolor As OLE_COLOR left As Long top As Long 'osv... End Type Private Sub Command1_Click() Dim NytIndeks As Integer Dim top, left As Integer
Do While i < 5 top = top + 10 left = left + 10 mincircle.top = top mincircle.left = left NytIndeks = Shape1.Count
Ok, shjdsi jeg har lige fixet et lille simpelt eksempel til dig... Du skal bare tage nedenstående kode og kopier ind i Notepad. Dernæst skal du gemme teksten som "Form1.frm" og åbne den fil du lige har gemt. Så har du både formen, objekter og koden, og du kan nu køre eksemplet... Nåm, her er filen:
VERSION 5.00 Begin VB.Form Form1 Caption = "Form1" ClientHeight = 4095 ClientLeft = 60 ClientTop = 345 ClientWidth = 5790 LinkTopic = "Form1" ScaleHeight = 4095 ScaleWidth = 5790 StartUpPosition = 3 'Windows Default Begin VB.CommandButton Command1 Caption = "Opret Objekter" Height = 615 Left = 120 TabIndex = 0 Top = 3360 Width = 2175 End Begin VB.Shape shpFigur FillStyle = 0 'Solid Height = 615 Index = 0 Left = 120 Shape = 4 'Rounded Rectangle Top = 120 Width = 855 End End Attribute VB_Name = "Form1" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False Option Explicit
Private Sub Command1_Click()
Dim NytIndeks As Integer Dim iTop As Long, iLeft As Long Dim FyldFarve As OLE_COLOR
Dim ix As Integer For ix = 1 To 5 NytIndeks = shpFigur.Count Load shpFigur(NytIndeks)
tak for hjælpen det virker ligesom jeg vil have det. jeg kunne vel ikke for de 100 point få dig til at forklare hurtigt et 2-dimensionelt array.
den ene dimention skal holde en string, den anden en integer
således mitarray() redim preserve mitarray(ettal,ettal) det skal initaliseres udfra et udtræk fra en db, således at string kommer til at holde navnet på det jeg vil chekke og status kommer til at holde et tal der angiver om den givne strings status.
på baggrund af dette array skal de dynamiske kontroller dannes
så hvis status f.eks er 3 og string er "minprocess" laver den fillcolor rød.
Mit problem er rent teknisk hvordan initalisere jeg et sådan array og hvordan læser jeg det.
der er lige mange elementer i dimensionx,y så det burde ikke være et problem
Sorry, jeg havde ikke lige adgang til net, så jeg kunne ikke svare på dit spørgsmål. Jeg nåede at skrive følgende inden jeg opdagede at du havde oprettet et nyt spørgsmål omkring det 2-dimentionelle array og fået et acceptabelt svar på det. Anyways, jeg poster lige mit halv-færdige svar så det ikke er helt spildt.
Størrelsen på et array kan, uanset hvor mange dimensioner det har, kan kun defineres ud fra en heltalsværdi - altså en integer. Dog kan man lave en string array, som indeholder en streng - men dimensionerne er stadig integer's. Det er altså opbygget som følger: ArrayNavn(Antal,Antal,...) As Variabel (String, Integer osv.)
Hvad du i stedet kan lave så du kan hæfte flere variable til hver array er en brugerdefineret "type"... [det var så det jeg nåede]
Tak for point, godt du kunne bruge mit svar ;) -Sion
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.