VB6: Funktion automatisch starten

Hallo,

wie kann man bei Programmstart einen Tastendruck (CommandButton) quasi automatisch betätigen?

Danke.

Gruß
Gunter

Hallo,

wie kann man bei Programmstart einen Tastendruck
(CommandButton) quasi automatisch betätigen?

nicht klicken, sondern Die Prozedur für das Klickereignis aufrufen.
Beispiel:

Option Explicit

Private Sub Command1\_Click()
 Text1.Text = "Test"
End Sub

Private Sub Form\_Load()
 Command1\_Click
End Sub

Gruß Rainer

Hallo,

wie kann man bei Programmstart einen Tastendruck
(CommandButton) quasi automatisch betätigen?

nicht klicken, sondern Die Prozedur für das Klickereignis
aufrufen.

Hallo Rainer,

genau das habe ich als erstes versucht. Geht leider so nicht richtig.
Es ist aber bei mir auch etwas komplizierter, da diese Prozedur eine neue Form aufruft. Das geht auch noch, aber nach verlassen dieser Form
wird der Rest der wieder auf der Standardform läuft nicht richtig ausgeführt. Werde aber mal weitersuchen.

Gruß
Gunter

Gruß
Gunter

Hi Gunter,

genau das habe ich als erstes versucht. Geht leider so nicht
richtig.

jede andere Variante ist schlechter.

Es ist aber bei mir auch etwas komplizierter, da diese
Prozedur eine neue Form aufruft. Das geht auch noch, aber nach
verlassen dieser Form
wird der Rest der wieder auf der Standardform läuft nicht
richtig ausgeführt.

Was heißt ‚nicht richtig‘?
Ohne Deinen Code zu sehen, ist ein Kommentar dazu nicht möglich.

Gruß Rainer

Hallo Rainer,

habe das Problem mit einem Timer den ich sowieso schon laufen habe, gelöst:

Sub Form_Load()
Flag = True
End Sub

Sub Timer1_Timer()
If Flag = True Then
Flag = False
Call Command14_Click
End If
End Sub

Besten Dank.
Gruß Gunter

Hallo Gunter,

habe das Problem mit einem Timer den ich sowieso schon laufen
habe, gelöst:

wenn man das anders formuliert heißt es ohne diesen Timer wäre das Problem noch ungelöst. Was machste mit gleichem Problem in einem projekt wo du keinen Timer hast?

Ich sehe diesen Timer als workaround aber bezweifle erstmal daß er nötig ist.

Zeige mal deinen Gesamtcode, naja, zumindest den relevanten :smile:

Ich kann mir beim flüchtigen Mitlesen hier nicht vorstellen daß es nicht möglich ist ohne Timer o.ä. beim Laden einer Form dort einen Button „auszulösen“

Gruß
Reinhard

Sub Form_Load()
Flag = True
End Sub

Sub Timer1_Timer()
If Flag = True Then
Flag = False
Call Command14_Click
End If
End Sub

Besten Dank.
Gruß Gunter

Hi,

habe das Problem mit einem Timer den ich sowieso schon laufen
habe, gelöst:

Sub Form_Load()
Flag = True
End Sub

Sub Timer1_Timer()
If Flag = True Then
Flag = False
Call Command14_Click
End If
End Sub

da stimmt etwas nicht, dieser Umweg über einen Timer ist unsauber. Das kann zu Problemen führen.

Die ‚Lösung‘ gefällt mir gar nicht. Du hast das Problem nicht gelöst, nur die Symptome beseitigt.

Gruß Rainer

Ich kann mir beim flüchtigen Mitlesen hier nicht vorstellen
daß es nicht möglich ist ohne Timer o.ä. beim Laden einer Form
dort einen Button „auszulösen“

Hallo Reinhard,

hier das Coding das nicht funktioniert:

Sub Form_Load()
Call Command14_Click
End Sub

Sub Command14_Click()
Form2.Show DoEvents
Call Suche 'Datenbanksuche und Ergebnis in einem Listview
End Sub

’ hier der Event auf der Form2 um diese wieder zu verlassen
Sub Command12_Click()
Unload Form2
End Sub

Danach ist meine Standardform Form1 leer

Gruß
Gunter

Hallo Gunter,

ohne den gesammten Source zu kennen, kann man nur Vermuten. Setzt du einen Timer und führst dann die Sub aus klappt es. Ohne Timer nicht, hmmm…

Ok, deine Form wird geladen. Es tritt das Form_Load Ereignis auf. Dann rufst du aber sofort die Form2 über deine Sub auf und dieser holt die Daten. Beim verlassen stehen nun die Daten bereit aber die Form1 ist nicht fertig geladen… Bei Nutzung eines Timers ist es anders. Du verzögerst dadurch den Aufruf der Sub und die Form1 hat Luft zum laden. Klar das es dann geht.

Abhilfe, schafft es wenn du entweder das Form_Activate in Verbindung mit einer Privaten Variable nutzt. Sprich in der Form

Private Loading as Boolean

Private Sub Form\_Load
loading=true
End Sub

Private Sub Form\_Activate
if Loading then Call Command14\_Click
Loading=false
End Sub

Ist aus dem Kopf geschrieben, sollte dir aber nur zum Verstaendnis dienen. Sollte eigentlich auch klappen :smile:

Oder aber …

Du startest dein Project in einem Modul! Lädst dort die Daten und danach die Form1. Wenn sie geladen ist, kannst du dann die Daten da zuweisen, sofern es erforderlich ist :smile:

MfG Alex

Hallo,

versuch mal …

Sub Form_Load()

Me.Show
DoEvents
Me.Hide

Call Command14_Click
End Sub

Sub Command14_Click()
Form2.Show, vbModal DoEvents
Call Suche 'Datenbanksuche und Ergebnis in einem Listview
End Sub

Gruß Rainer

Hall Rainer,

wenn man Me.Hide wegläßt, funktioniert es.
Ferner muß bei Form2.show DoEvents bleiben,
bei Form2.show, vbModal gibt es Laufzeitfehler: Typenunverträglichkeit.

Also funktionierender Code:

Sub Form_Load()
Me.Show
DoEvents
Call Command14_Click
End Sub

Sub Command14_Click()
Form2.Show DoEvents
Call Suche 'Datenbanksuche und Ergebnis in einem Listview
End Sub

Ich danke.

Gruß
Gunter

Sub Form_Load()

Me.Show
DoEvents
Me.Hide

Call Command14_Click
End Sub

Sub Command14_Click()
Form2.Show, vbModal DoEvents
Call Suche 'Datenbanksuche und Ergebnis in einem Listview
End Sub

Gruß Rainer

hallo,

bei Form2.show, vbModal gibt es Laufzeitfehler:
Typenunverträglichkeit.

sorry, ungetestet. :smile: Das Komma ist zu viel.
Ich schreib auch immer nur … Form2.Show 1

Öffnest Du die Form nicht modal,

Sub Command14_Click()
Form2.Show DoEvents
Call Suche 'Datenbanksuche und Ergebnis in einem Listview
End Sub

wird ‚Suche‘ ausgeführt, bevor die Form 2 geöffnet wird.

Gruß Rainer

Hallo Rainer,

so funktioniert es nun auch, sehe allerdings keinen Unterschied.
Die Form wird wohl automatisch modal geöffnet.

Die Such wird erst nach verlassen der Form2 ausgeführt.

Nochmals danke.

Gruß
Gunter

sorry, ungetestet. :smile: Das Komma ist zu viel.
Ich schreib auch immer nur … Form2.Show 1

Öffnest Du die Form nicht modal,

wird ‚Suche‘ ausgeführt, bevor die Form 2 geöffnet wird.

Gruß Rainer

Hallo,

Die Form wird wohl automatisch modal geöffnet.

nein. :smile:

Beispiel:

Form1:

Option Explicit

Private Sub Form\_Load()
 Me.Show
 Form2.Show
 Label1.Caption = Form2.Text1.Text
End Sub

Form2:

Option Explicit

Private Sub Form\_Activate()
 Text1.Text = "Versuch"
 Form2.Hide
End Sub

nach dem Start steht in Form1.Label1: ‚Text1‘.

Ändere ich:

Option Explicit

Private Sub Form\_Load()
 Me.Show
 Form2.Show 1
 Label1.Caption = Form2.Text1.Text
End Sub

Steht nach dem Start im Label ‚Versuch‘.

Der Code wird in einer anderen Reihenfolge abgearbeitet, das ist ein völlig anderes Programm!
Wenn Du jetzt keine Veränderung siehst, liegt das an Deinem Code, den Du uns nicht gezeigt hast. Was der Code tut, sollte Dir trotzdem bewusst sein.

Ach ja, noch etwas.

Du musst die anderen Formen explicit entladen, wenn das Programm beendet wird. Compiliere Dein Projekt mal, starte es und beende es wieder. Dann sieh in den Taskmanager. Dort steht, Dein Programm läuft noch.

Am einfachsten ist in der Startform einzufügen:

Private Sub Form\_QueryUnload(Cancel As Integer, UnloadMode As Integer)
 End
End Sub

Gruß Rainer

Hallo Rainer,

werde mich mal mit dem Modalfenster beschäftigen.

Das beenden der Formen hatte ich bereits eingebaut.

Gruß
Gunter