Archiv verlassen und diese Seite im Standarddesign anzeigen : Warteschleife Programmieren?
Hi,
folgender code:
Sub main()
frmLoad.Show
frmLoad.ProgressBar1.Value = 0
Dim strLabelText As String
strLabelText = "Status:" & Chr(13)
Set db = New Connection
db.CursorLocation = adUseClient
danach kommt noch ein db.open und ein recordset.open
jedoch wird das form ´Load´ nicht angezeigt, da der recordset.open so viel prozessorzeit in anspruch nimmt...
wie schreib ich nochmal die warteschleifen in vb, dass eben erst das form vollstaendig angezeigt wird?!
thanx
du musst afaik ein timer objekt machen, ohne geht das meines wissens nicht mehr.
aber gibts nicht die möglichkeit, zu überprüfen, ob das form geladen ist?
oder dann in der frmLoad eine sub Form_Load(), die eine sub in der aufrufenden form aufruft, in der dann recordset.open kommt.
also etwa so:
frmMain: (oder wie die auch immer heisst)
Sub main()
frmLoad.Show
frmLoad.ProgressBar1.Value = 0
Dim strLabelText As String
strLabelText = "Status:" & Chr(13)
End Sub
Sub onfrmLoad()
Set db = New Connection
db.CursorLocation = adUseClient
db.open
recordset.open
End Sub
frmOpen:
Private Sub Form_Load()
frmMain.onfrmLoad
End Sub
mhm... das Main() steht in einem modul, von dort aus wollte ich das form steuern... und meines wissens gibt es da was wie z.b.
dim i as long
for i = 0 to 100
do nothing
next i
so aehnlich sah das aus... aber das funtzt net...
thanx
Original von -silencer-
mhm... das Main() steht in einem modul, von dort aus wollte ich das form steuern...
dann ersetzt halt in meinem code frmMain.onfrmLoad durch modulname.onfrmLoad
Original von -silencer-
und meines wissens gibt es da was wie z.b.
dim i as long
for i = 0 to 100
do nothing
next i
so aehnlich sah das aus... aber das funtzt net...das funzt schon, ist aber ein hässliches work arround
also das do nothing darf da ned stehen, da muss entweder nix hin oder dann irgend ne rechnung oder so.
das ist aber nicht verlässlich, kommt dann ganz auf den ausführenden computer an, wie lange das dauert
wenn ich die rs.open in das frmLoad kopiere, wird das form zur laufzeit gar nicht angezeigt... wenn ich alles von dem modul aus steuere, wird nur die progressbar angezeigt... :confused:
wie soll ich das nun am geschicktesten loesen?
funzt das so, wie ich es dir gesagt hab, ned?
und mit dem timer objekt? (ist zwar auch nur n workarround, aber immer noch besser als leere for-next)
funzt das so, wie ich es dir gesagt hab, ned?
das versteh ich net... und das ist auch ein bissl viel, um jetzt alles rumzukopieren... :(
und mit dem timer objekt? (ist zwar auch nur n workarround, aber immer noch besser als leere for-next)
timer hab ich auch net hinbekommen, und do nothing funtzt auch net... :confused:
ich habs mit nem timer hinbekommen... danke vielmals.
Du musst einfach hinter das Form.Show
DoEventseinfügen... Dadurch wartet der bis die Form angezeigt wurde...
Hi,
Finger weg von "Warteschleifen"!!!
besser:
If istFormOffen("Form_Name") Then
'Aktion wenn offen
Else
'Aktion wenn nicht offen
EndIf
'oder Bsp. warten bis Form offen/geschlossen
While istFormOffen("Form_Name")
DoEvents
Wend
'or NOT
Public Function istFormOffen(vForm As String) As Boolean
istFormOffen = (SysCmd(acSysCmdGetObjectState, acForm, vForm) <> 0)
End Function
kurz und schmerzlos
Diese Lösung beansprucht meines Wissens kaum Systemleistung.
cu bruno
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.