Nur bestimmte Items in ListView

  • VB.NET

Es gibt 28 Antworten in diesem Thema. Der letzte Beitrag () ist von Pasta.

    Nur bestimmte Items in ListView

    Hallo Community!

    Ich habe ein kleines Problem.
    Also durch meinen Timer (Intervall 100ms) ändert sich von Label1 der Text ständig.
    Also z.B.: Label1.Text = "Beispieltext1" --> Label1.Text = "Beispieltext2" --> Label1.Text = "Beispieltext1" --> Label1.Text = "Beispieltext2" usw...

    Das wird dann ständig in die ListView eingefügt via Label1 TextChanged.

    Ich will, dass genau bei diesen beiden Texten, also "Beispieltext1" und "Beispieltext2" (eventuell später auch noch "Beispieltext3") eine Ausnahme gemacht wird.
    Wenn z.B. Label1.Text = "Hallo" ist, will ich es in der Listview haben.
    Also habe herausgefunden wie ich es löse, wenn ich nur Beispieltext1 hätte.

    VB.NET-Quellcode

    1. Private Sub Label1_TextChanged(sender As Object, e As EventArgs) Handles Label1.TextChanged
    2. If Not Label1.Text = "Beispieltext1" Then
    3. ListView1.Items.Insert(0, Label1.Text)
    4. End If
    5. End Sub


    Habe es probiert mit:

    VB.NET-Quellcode

    1. If Not Label1.Text = "Beispieltext1" Or "Beispieltext2" Then

    das hat aber nicht funktioniert.

    Ich hoffe ihr habt keine Kopfschmerzen beim Lesen bekommen, weil es ein ziemliches Wirrwarr ist. :P
    Das mit dem If Not hatte ich auch schon und habe es dann so gelöst, aber es ist grade nicht die Beste Möglichkeit.

    VB.NET-Quellcode

    1. Private Sub Label1_TextChanged(sender As Object, e As EventArgs) Handles Label1.TextChanged
    2. If Label1.Text = "Beispieltext1" Then
    3. Else
    4. ListView1.Items.Insert(0, Label1.Text)
    5. End If
    6. End Sub

    es ist eigentlich genau das gleiche nur das wen der Text dort steht, etwas anderes passiert, wie mit dem ​If Not.
    Und sorry wen das nicht geht ich Programmiere selten, ich kann ja Martin fragen wen er gleich da ist er kommt aber erst um 19:30.

    MfG Steven
    MfG, Martin
    Hi
    If Not passt doch soweit. Das Problem liegt beim Or.

    VB.NET-Quellcode

    1. If Not (Label1.Text = "bla" Or Label1.Text = "blubb") Then

    statt Or sollte man außerdem bei sowas OrElse verwenden. Dadurch wird das zweite Argument (Argument1 OrElse Argument2) nicht ausgewertet, wenn bereits Argument1 "wahr" ergab und somit der rechte Teil keine Rolle mehr spielt.

    Es gilt übrigens: Not (X Or Y) = Not X And Not Y. Statt And sollte man außerdem auf AndAlso ausweichen. Dort gilt das gleiche, wie beim OrElse, nur dass die Auswertung des 2. Arguments weggelassen wird, sofern Argument1 bereits False war.
    Was außerdem auch geht:

    VB.NET-Quellcode

    1. If Not (New String(){"bla", "blubb"}).Contains(Label1.Text) Then

    Ich weiß gerade nicht, ob erkannt wird, dass es sich um ein String-Array handelt, wenn man "New String()" weglässt. Ggf. einfach mal ausprobieren:

    VB.NET-Quellcode

    1. If Not {"bla", "blubb"}.Contains(Label1.Text) Then


    Viele Grüße
    ~blaze~
    Oh, achso, hab Label1.Text = "Beispieltext2" vergessen. Mit dem Or war doch alles richtig?

    EDIT: Kannst du mir vielleicht auch noch dabei helfen, wie ich ein Item aus der ListView mit einem Doppelklick kopiere?
    Hatte vorgehabt das irgendwie mit dem DoubleClick Event von der Listbox zu machen und dann noch zu überprüfen welches Item gerade selected ist.
    Bin mir aber nicht sicher, wie ich das genau anstelle.
    Einfach alle Items aus SelectedItems bei einem ItemActivate-Ereignisse nochmal reinklatschen.

    Naja, dass du Or verwenden sollst, stimmt, aber du kannst über den Code, wie er bei dir aussieht, überprüfen, ob "Beispieltext1 oder Beispieltext2" drinsteht. Egal, weiß jetzt nicht, ob's nicht eh ankam.

    Viele Grüße
    ~blaze~

    VB.NET-Quellcode

    1. Private Sub ListView1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListView1.DoubleClick
    2. ListView1.Items(ListView1.SelectedIndex) ' copy to clipboard, aber wie?
    3. End Sub


    Geht das so?
    Also mach das so:

    VB.NET-Quellcode

    1. ​My.computer.clipboard

    irgend wo in ​My.computer muss ein Clipboard Argument sein. befolge dan was du siehts, ich bin grade nicht in VS drinne daher muss ich das grob machen.
    MfG, Martin
    du weis doch wo die Eigenschaften sind, dort ist ein Blitz-symbol, geh auf dein Steuerelement und ganz oben steht ​Doppel-Klick auf deutsch oder Englisch, bei mir ist es english.
    MfG, Martin
    hmmm... ich glaub du machst dass so, das du bei .click einfach .doppleclick hin schreibst,

    VB.NET-Quellcode

    1. my.computer.clipboard.addtext(ListView1.selecteditem)

    weil es wird ja nur Ausgewählt per Click, dan wird es mit einen Doppel klick Ausgewählt, sonst schau mal bei google nach.
    Sorry das es gedauert hat, war Auf Klo :D
    MfG, Martin
    Habe in meiner Snipselsamlung gestöbert und was gefunden.:

    VB.NET-Quellcode

    1. Private Sub ListView1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListView1.DoubleClick
    2. If ListView1.SelectedItems.Count = 0 Then Exit Sub
    3. Clipboard.Clear()
    4. Clipboard.SetText(ListView1.SelectedItems(0).Text)
    5. MessageBox.Show(Clipboard.GetText & " Wurde In die Zwischenablage Kopiert")
    6. End Sub
    @Pasta Willkommen im Forum. :thumbup:
    Ist da nach einem Doppelklick auf das ListView überhaupt noch ein Item selektiert?
    Ich glaube nicht.
    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 schrieb:

    ....Ist da nach einem Doppelklick auf das ListView überhaupt noch ein Item selektiert?
    ...

    Ja, ist es.
    Ich habe den code natürlich vor dem posten, auf Funktionalität überpruft.
    Bin mir nicht sicher, ob ich jetzt einen Thread dafür erstellen soll, aber wie speichere ich die ListView als .txt ab?

    Habe es so versucht:

    VB.NET-Quellcode

    1. Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles NsButton1.Click
    2. Using FD As New SaveFileDialog()
    3. FD.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"
    4. If FD.ShowDialog = Windows.Forms.DialogResult.OK Then
    5. IO.File.WriteAllLines(FD.FileName, (From p As String In ListView1.Items Select p).ToArray)
    6. End If
    7. End Using
    8. End Sub


    Ok geht jetzt, habs so gemacht:

    VB.NET-Quellcode

    1. ​SaveFileDialog1.Filter = "Text Files (*.txt)|*.txt|All Files (*.*)|*.*"
    2. SaveFileDialog1.FilterIndex = 1
    3. If SaveFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
    4. Dim myStream As New StreamWriter(SaveFileDialog1.FileName, True)
    5. Dim sFile As String = String.Empty
    6. For Each lvItem As ListViewItem In ListView1.Items
    7. sFile += vbNewLine & lvItem.SubItems(0).Text
    8. Next
    9. myStream.Write(sFile)
    10. myStream.Close()
    11. End If

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

    @nikexo Geht nicht als geschlossene Lösung.
    Ich empfehle Dir, ein DataGridView zu nehmen, die Daten in eine DataTable zu packen und diese als DataSource an das DGV zu binden.
    Speichern und Laden der Tabelle als XML geht dann als einfacher Befehl: table.WriteXML(PFAD), table.ReadXML(PFAD).
    ----------------

    Pasta schrieb:

    natürlich
    habe ich das auch getan, dabei auch alle Views ausprobiert.
    Bei mir ist stets ausschließlich das doppelgeklickte Item selektiert. Teste dies im Doppelklick-Event:

    VB.NET-Quellcode

    1. MessageBox.Show(ListView1.SelectedItems.Count.ToString & Environment.NewLine & ListView1.SelectedItems(0).Text)
    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!