Listview und Prozesse mit Ausnahmen!

  • VB.NET
  • .NET 3.5

Es gibt 23 Antworten in diesem Thema. Der letzte Beitrag () ist von mrMo.

    Listview und Prozesse mit Ausnahmen!

    Moin! :)
    Ich habe leider gerade ein Problem und komme nicht weiter….
    Deshalb freue ich mich sehr, wenn mir hier geholfen wird.

    Also ich habe eine ListView1 diese die aktuellen Prozesse anzeigt.
    Mein Ziel ist es dass, wenn z.B 15 Anwendungen aktiv sind, ein neues Fenster erscheint.
    Das zweite Fenster zeigt dann weitere Infos an.
    Besser gesagt, bietet es dann eine Möglichkeit unnötige Prozesse zu beenden, um wieder Arbeitsspeicher freizugeben.

    Ich möchte eine Ausnahmeliste erstellen, das bedeutet dass diese Fenster Ignoriert werden soll. Und diese nicht mit gezählt werden sollen.
    Zum Beispiel habe ich 5 Fenster geöffnet aber zwei Fenster werden ignoriert, wegen der Ausnahme.

    Ich hoffe ich könnte mein Problem gut erklären.
    Da es nicht so einfach ist, für mich es genau zu Beschreiben.
    Außerdem habe das Projekt als Beispiel hochgeladen.
    Freue mich auf eure Hilfe!
    BIG THX


    VB.NET-Quellcode

    1. ' ---------------------------------------
    2. ' Hier das Problem!
    3. ' Verstehe nicht wie, man hier weiter kommt....
    4. ' Hoffe mir kann jemand weiter helfen...
    5. If Me.ListViewEx1.Items.Count >= (Me.NumericUpDown1.Value + anzahl_normal) Then
    6. ' ---------------------------------------





    Downloadlink:
    Gelöscht!
    Visual Basic.NET 8o
    MS-SQL
    8o

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Cheffboss“ ()

    Im Allgemeinen bin ich der Meinung, das es an der Zeit ist das du dich von deinen ListViews verabschiedest und endlich mit einem DataGridView arbeitest, so wie die anderen coolen Kinder hier ;)
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    @mrMo
    Danke, für deine Antwort. :)
    Ich habe mir angewöhnt, nur mit einen Datenbank Inhalt ein DataGridView zu verwenden.
    Oder was spricht noch dafür?

    @Fakiz
    Danke, für den Vorschlag. :)
    Aber ich habe nicht gemeint, wie man ein neues Fenster anzeigt.
    Es geht eher um diese Zeile:

    VB.NET-Quellcode

    1. If (Me.ListViewEx1.Items.Count - anzahl_ausnahmen) >= Me.NumericUpDown1.Value Then


    @an alle
    Ein weiteres Beispiel zum Verstehen, was ich genau möchte!
    Wenn jetzt verschiedene Anwendungen geöffnet sind.
    Aber manche in einer Ausnahme drin sind.
    Dann soll das Programm diese ignorieren.
    Zum Beispiel auf dem Bild habe ich 6 Anwendungen geöffnet, aber alle sind in der Ausnahme
    Außereiner, diese nicht rot markiert ist.
    Wenn ich nun in der NumericUpDown eingebe, das es nur ab 1 Fenster eine erfolgreiche Meldung ausgibt.
    Ich hoffe ich habe es nun gut erklären können. ^^

    Visual Basic.NET 8o
    MS-SQL
    8o
    Definiere

    Cheffboss schrieb:

    Aber manche in einer Ausnahme drin sind.
    Das ist aus Deinem Bild nicht ersichtlich.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Cheffboss schrieb:


    Ich habe mir angewöhnt, nur mit einen Datenbank Inhalt ein DataGridView zu verwenden.
    Oder was spricht noch dafür?


    Wenn du schreiben würdest Ich habe mir angewöhnt bei DGV's nur mit Binding zu arbeiten. würde ich die Aussage unterstüzen. Eine Bindingsource kannst du an eine Daten-Tabelle hängen und daran dein DGV. Ob die Tabelle nun Teil eines Datasets ist, am besten noch mittels Designer (streng typisiert) oder per Code erzeugt, ist dafür erst einmal völlig egal. Du kannst das DGV auch direkt an eine Tabelle hängen, würde ich aber nicht zu raten, wenn man Filtern will z.B. ist eine Bindingsource einfacher hand zu haben. Auf jeden Fall brauchst du dann keinen umständlichen Code mehr, den so ein ListView auf jeden Fall benötigt.
    @RodFromGermany
    Ich versuche es nochmals besser zu erklären.
    In meinem Programm werden alle aktiven Anwendungen aufgelistet.
    Sinn des Programmes soll sein, das wenn man viele Anwendungen geöffnet hat, ein neues Fenster erscheint, um die Prozesse diese man nicht mehr braucht richtig zu beenden.

    Um Datenverlust zu vermeiden möchte ich aber, keine Anwendung die in der Ausnahmeliste ist beenden , wenn z.B ein Dokument nicht abgespeichert worden ist!
    Deshalb soll dann dieses Programm dann Ignoriert werden!
    In dem NumericUpDown soll man einstellen können, ab wie viele geöffnete Anwendungen das neue Fenster angezeigt werden soll.

    Nun zur Erklärung des Bildes:
    Wie man auf dem Bild sieht, habe ich jetzt 6 Anwendungen geöffnet, aber nur 1 Anwendung darf so geschlossen werden.
    Da diese im normal Fall kein Datenverlust verursachen, ganz anders wie bei einen Word Dokument.
    Mein Problem ist nun die Überprüfung mit IF.
    Mir fällt leider keine Lösung ein, habe bereits vieles getestet!
    Nur bei der IF-Bedienung hänge ich gerade fest. :!:
    Visual Basic.NET 8o
    MS-SQL
    8o
    @Cheffboss Was ist IF?
    Wie stellst Du fest, dass sich ein Programm in diesem Modus befindet?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany
    Mit IF meine ich die IF-Bedingung.
    Jedes Programm das in der Ausnahmeliste vorhanden ist.
    Hat im ListView eine andere Farbe.
    In meinen Fall Rot!

    VB.NET-Quellcode

    1. Dim anzahl_ausnahmen As Integer : Dim anzahl_normal As Integer
    2. For Each item As ListViewItem In ListViewEx1.Items
    3. If item.BackColor = Color.Red Then
    4. anzahl_ausnahmen += 1
    5. Else
    6. anzahl_normal += 1
    7. End If
    8. Next
    Visual Basic.NET 8o
    MS-SQL
    8o
    @Cheffboss: Nein. Das beantwortet die nicht-gestellte Frage, wie Du existierende Ausnahmen zählst. Eine denkbar schlechte Variante, weil Du den GUI-Zustand als Kriterium hernimmst. Datenstrukturen sind zuverlässiger, aber dazu kommen wir später.
    Die korrekte Antwort auf @RodFromGermany Frage wäre: Es gibt eine hardcodierte Liste von App-Namen, die als Ausnahme angesehen werden:
    Dim AusnahmenArray() As String = {"wordpad", "notepad", "mspaint"}

    btw: Dein GUI enthält mehrere Rechtschreibfehler, falls relevant. (m.E.) korrekt wäre:
    Nach wieviel geöffneten Fenstern soll eine Meldung erscheinen?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    @xored
    Vielen Dank, dieser Tipp war echt gut. :)

    @VaporiZed
    Vielen Dank, für die Info wegen dem Rechtschreibfehler. :)

    @an alle
    Ich habe es kurz getestet, mit diesem Code:

    VB.NET-Quellcode

    1. If Me.NumericUpDown1.Value <= (Me.ListViewEx1.Items.Count - anzahl_ausnahmen) Then

    Bis jetzt funktioniert es gut.
    Ich hoffe dass damit das Problem behoben ist.
    Falls doch nicht, werde ich nochmals eine neue Nachricht posten.

    Nochmals, an alle Vielen Dank! :thumbup:

    Ergebnis:

    Visual Basic.NET 8o
    MS-SQL
    8o
    @Cheffboss Diese Frage ist noch nicht beantwortet:

    RodFromGermany schrieb:

    Wie stellst Du fest, dass sich ein Programm in diesem Modus befindet?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany
    Ich hoffe das deine Frage nun beantwortet ist.
    Das ist der Code um die Einträge zu herstellen. ^^

    VB.NET-Quellcode

    1. Me.ListViewEx1.Items.Clear()
    2. For Each AppTitle As Process In Process.GetProcesses
    3. If Not AppTitle.MainWindowTitle = "" Then
    4. If Not AppTitle.MainWindowTitle = "SysFader" Then
    5. If Not AppTitle.MainWindowTitle = Me.Text Then
    6. ' Hinfügen...
    7. Me.ListViewEx1.Items.Add(AppTitle.MainWindowTitle).SubItems.Add(AppTitle.ProcessName)
    8. End If
    9. Dim AusnahmenArray() As String = {"wordpad", "notepad", "mspaint"}
    10. For i As Integer = 0 To AusnahmenArray.Length - 1
    11. For Each item As ListViewItem In Me.ListViewEx1.Items
    12. If AusnahmenArray(i) <> "" Then
    13. If item.SubItems(1).Text = AusnahmenArray(i) Then
    14. ' Werte markieren...
    15. item.BackColor = Color.Red
    16. End If
    17. End If
    18. Next
    19. Next
    20. End If
    21. End If
    22. Next
    Visual Basic.NET 8o
    MS-SQL
    8o
    Puh, das sind aber viele Ebenen von Prüfungen und Schleifen...
    Würde da eher vorher mal aussteigen bevor da so tief verschachtelte Prüfungen gemacht werden.

    Ganz am Anfang erst alles was an dieser Stelle möglich ist in der richtigen Reihenfolge prüfen und ggf. direkt aus der Sub/Schleife springen.

    If(Foo = „mäh“ orelse Foo = „Oink“) Then Exit Sub
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    …eben Stichwort If-Umkehrung.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.

    Cheffboss schrieb:

    VB.NET-Quellcode

    1. If AusnahmenArray(i) <> "" Then
    Dieses If könnte entfallen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @mrMo
    Danke, für den Hinweis mit den Subs. :thumbup:
    Ich werde den Code lesbarer machen,
    in den ich verschiedene Subs aufrufe.

    @VaporiZed
    Danke, für den Link. ^^
    Werde diesen mal in Ruhe durchlesen.

    @RodFromGermany
    Ich werde es morgen, gleich testen. :)
    Vielen Dank, dann habe ich nun eine IF-Bedingung im Code weniger.
    Und er wird lesbarer - Vor allem mit den Tipps der weiteren Subs.
    Visual Basic.NET 8o
    MS-SQL
    8o

    Cheffboss schrieb:

    Ich werde den Code lesbarer machen,in den ich verschiedene Subs aufrufe

    Das hab ich nicht geschrieben und nicht gemeint..
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    @mrMo
    Leider habe ich nicht ganz verstanden was du gemeint hast.
    Ich habe gedacht du meinst, man soll den Code in mehre Subs einteilen.
    Falls du möchtest, kannst du mir es erklären, was du gemeint hast.
    Danke :thumbup:

    @an alle
    Vielen Dank, ich habe den Code nun etwas lesbarer machen können. :thumbup:

    Lösung:

    VB.NET-Quellcode

    1. Private Sub ListBoxFüllenMitAPPs()
    2. Me.ListViewEx1.Items.Clear()
    3. For Each AppTitle As Process In Process.GetProcesses
    4. If Not AppTitle.MainWindowTitle = "" Then
    5. If Not AppTitle.MainWindowTitle = "SysFader" Then
    6. If Not AppTitle.MainWindowTitle = Me.Text Then
    7. ' Hinfügen...
    8. Me.ListViewEx1.Items.Add(AppTitle.MainWindowTitle).SubItems.Add(AppTitle.ProcessName)
    9. End If
    10. End If
    11. End If
    12. Next
    13. End Sub
    14. Private Sub ListBoxAusnahmenMarkieren()
    15. Dim AusnahmenArray() As String = {"wordpad", "notepad", "mspaint"}
    16. For i As Integer = 0 To AusnahmenArray.Length - 1
    17. For Each item As ListViewItem In Me.ListViewEx1.Items
    18. If item.SubItems(1).Text = AusnahmenArray(i) Then
    19. ' Werte markieren...
    20. item.BackColor = Color.Red
    21. End If
    22. Next
    23. Next
    24. End Sub

    Visual Basic.NET 8o
    MS-SQL
    8o

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Cheffboss“ ()