Beantwortet pause zwischen zwei ereignissen

  • Samstag, 27. Oktober 2012 10:27
     
      Enthält Code

    hallo!

    ich hab wiedermal ein problem:

    ich hab ein programm, dass den inhalt meiner textbox an ein anderes programm sendet und enter drückt (so weit so gut), dann sollte mein programm aber die ladezeit vom anderen programm abwarten, bevor es den inhalt meiner nächsten textbox sendet.

    hab schon 2 dinge versucht:

    SendKeys.SendWait(textbox1.Text)
    SendKeys.SendWait("{enter}")
    System.Threading.Thread.Sleep(5000)
    SendKeys.SendWait(textbox2.Text)
    SendKeys.SendWait("{enter}")

    hier ist das problem, dass durch System.Threading.Thread.Sleep(5000) auch die ladezeit vom anderen programm verlängert...also absolut ineffektiv!

    zweiter versuch:

    button click setzt timer1 auf enabled

    timer1.tick zählt bei label1.text immer eins dazu

    if label1.text = "1" then
    sendkeys.sendwait("textbox1.text")
    sendkeys.sendwait("{enter}")
    end if
    if label1.text = "6" then
    sendkeys.sendwait("textbox1.text")
    sendkeys.sendwait("{enter}")
    timer1.enabled = false
    label1.text = "0"
    end if

    diese möglichkeit funktioniert einwandfrei. jedoch zu meinem problem:

    genau das soll mein programm so oft ausführen wie in textbox3 angegeben.

    ich könnte jetzt einfach hergehen und das problem so lösen:

    if textbox3.text = "1" then if label1.text = "1" then sendkeys.sendwait("textbox1.text") sendkeys.sendwait("{enter}") end if if label1.text = "6" then sendkeys.sendwait("textbox1.text") sendkeys.sendwait("{enter}") timer1.enabled = false label1.text = "0" end if end if if textbox3.text = "2" then if label1.text = "1" then sendkeys.sendwait("textbox1.text") sendkeys.sendwait("{enter}") end if if label1.text = "6" then sendkeys.sendwait("textbox2.text") sendkeys.sendwait("{enter}") end if if label1.text = "7" then sendkeys.sendwait("textbox1.text") sendkeys.sendwait("{enter}") end if if label1.text = "11" then sendkeys.sendwait("textbox2.text") sendkeys.sendwait("{enter}") timer1.enabled = false label1.text = "0" end if

    end if

    usw. aber da es im normalfall 10-20 mal das ganze wiederholen muss und im extremfall sogar 100x sind das sehr sehr viele zeilen code, was auch einfacher gehen muss...

    vielen dank für eure hilfe!

    wünsch euch ein schönes wochenende!

Alle Antworten

  • Samstag, 27. Oktober 2012 11:41
     
     Beantwortet Enthält Code

    Hi,

    generell solltest Du mal mit ordentlichen Variablennamen arbeiten, dann versteht man den Code auch :)

    genau das soll mein programm so oft ausführen wie in textbox3 angegeben
    Dim Anzahl As Int32
        Int32.TryParse( textBox3.Text, Anzahl )
    
        For Counter As Int32 = 1 To Anzahl
            ' Mach was
            ...
        Next
    usw. aber da es im normalfall 10-20 mal das ganze wiederholen muss und im extremfall sogar 100x sind das sehr sehr viele zeilen code, was auch einfacher gehen muss...

    Das nennt sich "Schleife" und gehört zu den Grundlagen der Progammierung. Lies dich mal zu dem Thema hier ein:

      http://de.wikibooks.org/wiki/Visual_Basic_.NET:_Einfache_Schleifen

    Dann solltest Du mal überlegen, ob es Sinn macht, denselben Code x-mal wie bspw. hier:

    if textbox3.text = "2" then
    if label1.text = "1" then
    sendkeys.sendwait("textbox1.text")
    sendkeys.sendwait("{enter}")
    end if
    if label1.text = "6" then
    sendkeys.sendwait("textbox2.text")
    sendkeys.sendwait("{enter}")
    end if
    if label1.text = "7" then
    sendkeys.sendwait("textbox1.text")
    sendkeys.sendwait("{enter}")
    end if
    if label1.text = "11" then
    sendkeys.sendwait("textbox2.text")
    sendkeys.sendwait("{enter}")
    timer1.enabled = false
    label1.text = "0"
    end if

    zu schreiben.

    Bei allen Werten macht der Code dasselbe. Nur beim Wert 11 dann noch 2 Zeilen mehr. Daher bietet es sich an, den identischen Code auszulagern.

    Select Case label1.Text
        Case "1", "7"
            SendeZeichen( "textbox1.text" )
        Case "6"
            SendeZeichen( "textbox2.text" )
        Case "11"
            SendeZeichen( "textbox2.text" )
            timer1.enabled = false
            label1.text = "0"
    End Select
    
    ...
    
    Public Sub SendeZeichen( ByVal Eigenschaft As String )
    
        sendkeys.sendwait( Eigenschaft )
        sendkeys.sendwait( "{enter}" )
    
    End Sub

    Das geht natürlich noch besser und hübscher, aber es sollte ggfs. einen Denkanstoß geben.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community


  • Sonntag, 28. Oktober 2012 14:16
     
     

    vielen dank stefan!

    ich hab zwar nur etwa 25% - 30% von deinem posting verstanden, aber das war genug um mein problem zu lösen ;)

    schönen sonntag!