PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Warteschleife Programmieren?


pate33
13.11.2001, 13:24
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


sami
13.11.2001, 13:49
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

pate33
13.11.2001, 13:58
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

sami
13.11.2001, 14:11
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

pate33
13.11.2001, 14:28
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?

sami
13.11.2001, 14:37
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)

pate33
13.11.2001, 14:41
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:

pate33
13.11.2001, 14:52
ich habs mit nem timer hinbekommen... danke vielmals.

Hanno
15.12.2001, 19:04
Du musst einfach hinter das Form.Show
DoEventseinfügen... Dadurch wartet der bis die Form angezeigt wurde...

bruno
30.11.2004, 00:21
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