18. december 2003 - 15:04Der er
13 kommentarer og 1 løsning
form opdaring udføres ikke
Hej! jeg haar et mindre problem, jeg har et program der skal overvåge nogle værdier i en database, der bliver kørt en query ca. hvert 5 minut vha. en timer kontrol. Dette virker fint, jeg har lavet et program derr dynamisk opretter kontroller (shapes og labes) på en form aslt efter hvor meget data der er repræsenteret fra mit db udtræk, dette virker også fint.
Men nmår det er kørt en gang vil formen efterfølgende ikke opdatere med nye værdier.
jeg lavede et lille test program for sat verificere at der var endnu en udfordring for mig :-)
dette miniprogram burde efter min logik opdatere formen, men det gør det ikke
Private Sub Command1_Click() If Shape1.FillColor = vbBlue Then Shape1.FillColor = vbRed DoEvents
End If If Shape1.FillColor = vbRed Then Shape1.FillColor = vbBlue DoEvents
End If End Sub
Private Sub Form_Load() Shape1.FillColor = vbRed End Sub
Det er nogenlunde samme problem jeg har i mit projekt, eneste forskel er at jeg loader min shapes dynamisk
Nogen der har et bud på hvordan sådan noget kunne løses, jeg poster gerne min ,kode men har valgt dette eks. for overblikkets skyld.
Public Sub CheckQueue() Dim mosFunction As New Class1 Dim dbUserName, dbservername, dbPassword As String Dim NytIndeks As Integer Dim ix, iTop, iLeft As Integer Dim FyldFarve As OLE_COLOR Dim tst() As MyQueue Dim i As Integer Dim Queue() As String Dim queueCnt As Integer
dbUserName = QueryValue(HKEY_LOCAL_MACHINE, "SOFTWARE\PineQueueMonitor", "dbUser") dbservername = QueryValue(HKEY_LOCAL_MACHINE, "SOFTWARE\PineQueueMonitor", "dbserver") dbPassword = QueryValue(HKEY_LOCAL_MACHINE, "SOFTWARE\PineQueueMonitor", "dbPassword") 'convert the strings so they work
With mosFunction .databaseServer = dbservername .dbUserName = dbUserName .dbPassword = dbPassword End With
'der hentes fra listbox ind i array queueCnt = lstQueueSelected.ListCount ReDim Queue(lstQueueSelected.ListCount) For i = 0 To UBound(Queue) Queue(i) = lstQueueSelected.List(i)
Next i
'udfra array testes der i tabellen tst() = generalFunctions.testCheckQueue(Queue) iTop = 120 iLeft = 10 'monitor formen genereres With frmMonitor For ix = 0 To UBound(tst) NytIndeks = frmMonitor.Shpfigur.Count NytIndeks = .stdLabel.Count Load .Shpfigur(NytIndeks) Load .stdLabel(NytIndeks) .stdLabel(NytIndeks).Top = iTop + 100 .stdLabel(NytIndeks).Left = iLeft + 2000 .stdLabel(NytIndeks).Caption = tst(ix).MyQueue .Shpfigur(NytIndeks).Top = iTop .Shpfigur(NytIndeks).Left = iLeft 'hvis state = 4 ska den være rød etc... If tst(ix).MyState = 4 Then FyldFarve = vbRed ElseIf tst(ix).MyState = 0 Or tst(ix).MyState = 1 Then FyldFarve = vbBlack ElseIf tst(ix).MyState = 2 Then FyldFarve = vbGreen End If
.Shpfigur(NytIndeks).FillColor = FyldFarve .Shpfigur(NytIndeks).Visible = True .stdLabel(NytIndeks).Visible = True iTop = iTop + 700 Next ix .Show End With End Sub
Denne funktion kaldes med et interal og formen frmmonitor skal bare opdatere.
Der er ingen fejl beskeder! den opdatere vare ikke formen.... tror det er en general ting i vb, der er en eller anden property (eller også er det min funktion) der skal sættes.
symtomerne er jo de samme med følgende
Private Sub Command1_Click() If Shape1.FillColor = vbBlue Then Shape1.FillColor = vbRed DoEvents
End If If Shape1.FillColor = vbRed Then Shape1.FillColor = vbBlue DoEvents
End If End Sub
Private Sub Form_Load() Shape1.FillColor = vbRed End Sub
Synes godt om
Slettet bruger
18. december 2003 - 17:54#8
Jamen du har koden på en Click og den bliver jo kaldt 1 gang, nemlig når der klikkes på knappen. Du kan evt der hvor du skal opdatere kalde Command1_Click() så vil koden blive udført igen.
jamen hvis jeg trykker flere gange på knappen sker der ikke noget. I min logik skulle den vel skifte fra rød til blå hvergang jeg klikker på knappen :-) Eller er det bare mig der ikke fatter det.
Synes godt om
Slettet bruger
19. december 2003 - 17:18#10
Næ det har du da ret i. Jeg prøver lige at lave et lille projekt senere og paste din kode ind, hvis du kan vente?
Synes godt om
Slettet bruger
19. december 2003 - 19:51#11
Nu gik lyset op for mig...tror jeg :-)
Hvis farven er blå så gør den rød, derefter Hvis farven er rød så gør den blå Og der er jo sandt da den bliver sat til rød og så blå igen Prøv dette :
Private Sub Command1_Click() If Shape1.FillColor = vbBlue Then Shape1.FillColor = vbRed DoEvents Else If Shape1.FillColor = vbRed Then Shape1.FillColor = vbBlue DoEvents End If End If
End If End Sub
Synes godt om
Slettet bruger
19. december 2003 - 20:11#12
Der er lige et End If formeget: Private Sub Command1_Click() If Shape1.FillColor = vbBlue Then Shape1.FillColor = vbRed DoEvents Else If Shape1.FillColor = vbRed Then Shape1.FillColor = vbBlue DoEvents End If End If End Sub
Tak for hjælpen og glædelig jul! Dit eksemple virker, men får at få det aktuelle program hvor jeg også dynamisk opretter kontrollerne til ast virke må jeg lave en unload frmmonitor i loopet. hmmm jeg synes jo det burde virke med .refresh eller en repaint.
Synes godt om
Slettet bruger
23. december 2003 - 11:36#14
Tak for point og glædelig jul til dig også :-)
Nu kender jeg ikke lige din kode men synes det lyder mystisk at du skal lave en unload midt i for at få det til at virke. Du er velkommen til at poste mere kode så kan jeg da tage et kig.
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.