For Each, Process und text changed

  • VB.NET

Es gibt 25 Antworten in diesem Thema. Der letzte Beitrag () ist von picoflop.

    For Each, Process und text changed

    Hey Leute ;)

    Ich habe eine Textbox. Wenn sich der darin befindende Text ändert, soll eine For Each schleife ausgelöst werden, die alle prozesse durchsucht, die gerade laufen. Wenn der text mit einem prozessnamen übereinstimmt, soll button "SofortBeenden" erlaubt sein

    ansonsten nicht

    das mach ich bisher so

    VB.NET-Quellcode

    1. Private Sub TextGeaendert _
    2. Handles textbox_Prozessname.TextChanged
    3. For Each p _
    4. As Process _
    5. In Process.GetProcesses
    6. If textbox_Prozessname.Text = p.ProcessName Then
    7. button_SofortBeenden.Enabled = True
    8. Else
    9. button_SofortBeenden.Enabled = False
    10. End If
    11. Next


    was ist daran falsch :(?
    button SofortBeenden wir nie auf enabled = True gesetzt, obwohl der textbox text mit einem prozessnamen überein stimmt
    Steht in der TextBox der Prozess-Name mit .exe oder ohne?
    ProcessName gibt ihn immer ohne .exe zurück. ;)

    Außerdem, wieso machst du's so umständlich?

    VB.NET-Quellcode

    1. button_SofortBeenden.Enabled = textbox_Prozessname.Text = p.ProcessName
    Einfacher zu lesen und kürzer.

    VB.NET-Quellcode

    1. Public Sub TextBox1_TextChanged() Handles TextBox1.TextChanged
    2. For Each I As Process In Process.GetProcesses
    3. button_SofortBeenden.Enabled = CBool(TextBox1.Text.ToString.Contains(I.ProcessName))
    4. Application.DoEvents()
    5. Next
    6. End Sub

    Was läuft daran nicht?
    @haiyyu

    Ich wusste doch das du antworten wirst xDDD

    ich wusste nichtmal das sowas möglich ist! LOL :D
    wieder was von dir gelernt xD danke danke danke :D

    @mcdt
    jap hab ich. ^^

    @Mr.BlackStar
    das is mir etwas zu hoch.. :D
    aber kannst mir gern erklären :D:D

    @Pascal
    wusste ich auch nichts von.. wie gesagt, ich bin noch nicht so lange dabei ^^
    kannst du mir like bitte erklären? versteh des mit dem "*" nich so o.O^^

    danke für die ganzen möglichkeiten xD
    @Sinlikez

    Also:

    VB.NET-Quellcode

    1. Public Sub TextBox1_TextChanged() Handles TextBox1.TextChanged ' Text wird gewächselt
    2. For Each I As Process In Process.GetProcesses ' Prozesse werden aufgelistet
    3. button_SofortBeenden.Enabled = CBool(TextBox1.Text.ToString.Contains(I.ProcessName))
    4. ' Für dieses If Then müll wurde CBool (Convert to Boolean) eingefügt ob der Text in der Box übereinstimmt
    5. Application.DoEvents() ' Keine ruckler im Programm :D
    6. Next
    7. End Sub
    @Schwarzer Mann :D

    wann sollte man den appplication.do events verwenden? :)
    und übrigens. contains heisst doch eigentlich beinhaltet. aber wenn ich zum beispiel nach dem prozess BLUB suche und in der textbox aaaBLUBaaa stehen hätte, würde er des doch so uns so erlauben, oder? :D
    aber danke, jez kappier ich des auch^^!
    @Sinlikez

    1. hesiist es schwarzer Stern :D.
    2. Application.DoEvents() Sollte man in schleifen benutzen die lange dauern sowie:

    VB.NET-Quellcode

    1. Do
    2. 'Code
    3. Application.DoEvents()
    4. Loop
    5. 'oder
    6. :1
    7. 'Code
    8. Application.DoEvents()
    9. goto 1
    10. For ' usw.
    11. 'Code
    12. Application.DoEvents()
    13. Next
    14. While '...
    15. 'Code
    16. Application.DoEvents()
    17. End While
    18. ' Sowas halt.
    1. Naja da steht Mr. vor deinem namen :D und ausserdem dein bild xD
    2. Ich hatte bisher mit Do, Loop, goto und while NICHTs am hut xd
    3. er findet den prozess immer noch nicht :(

    Stimmt das überhaupt?

    For Each I As Process In Process.GetProcesses

    vllt ist es falsch :o
    Du kannst es ja kompliziert machen:

    VB.NET-Quellcode

    1. Dim JederPeter As New List(Of String)
    2. For Each Peter As Process In Process.GetProcesses()
    3. JederPeter.Add(Peter.ProcessName.ToString)
    4. Application.DoEvents
    5. Next
    6. For Each ThisProcess As String In JederPeter
    7. btn_blblba.Enabled = CBool(TextBox1.Text = ThisProcess)
    8. Application.DoEvents
    9. Next

    VB.NET-Quellcode

    1. Dim pList As New List(Of String)
    2. For Each p As Process In Process.GetProcesses
    3. pList.Add(p.ProcessName.ToString)
    4. Next
    5. For Each s As String In pList
    6. If CBool(TextBox1.Text = s) Then CheckBox1.Enabled = True : Exit For
    7. Next


    Edit: verbessert.
    Die For-Schleife ist das Problem.
    Du siehst letztendlich nur das Ergebnis für den letzten Process.
    Also, entweder musst Du die Schleife mit Exit For abbrechen, wenn der Process gefunden wurde oder alternativ:

    VB.NET-Quellcode

    1. Dim gesuchteProcesse() As Process = Process.GetProcessesByName(TextBox1.Text)
    2. Button1.Enabled = gesuchteProcesse.Length > 0

    Sinlikez schrieb:

    jetzt bin ich verwirrt?

    Stell dir vor, Stephen Hawking erzählt dir dass Reisen mit Lichtgeschwindigkeit nicht möglich sind. Der Postbote erzählt dir, DASS sie möglich sind. Wärst du verwirrt?
    Im obigen Beispiel ist Mike NICHT der Postbote.

    Man muss halt im Forum immer sehr genau hinschauen, WER einem was sagt. Nur weil der Einäugige unter den Blinden ein König ist, heißt das noch lange nicht, der er gut gucken kann ...