Listview: Item immer sichtbar

Wenn ListViewItems neue Elemente sind ein ListView-Steuerelement hinzugefügt, und diese sind so zahlreich, dass die Steuerung nicht über genügend Speicherplatz, um sie auf dem Bildschirm anzuzeigen, fügen Sie eine vertikale Scroll-Leiste. Das ist perfekt, nur standardmäßig nicht, dass neue Elemente hinzugefügt werden.

Heute möchte ich zeigen, wie man dieses kleine Problem zu lösen.

Visual Basic-Steuerelemente. Net Kegel der Listenansicht geben uns eine beeindruckende Reihe von Eigenschaften für die Konfiguration, so dass oft nicht bekannt sind.

Zeige ich ein einfaches Beispiel. Dafür brauchen wir eine Form, ein ListView-Steuerelement und eine Schaltfläche.

listviewItemSiempreVisible001

Die Eigenschaften, die uns interessieren, sind:

  • HideSelection: set es so falsch, dass, obwohl das ListView-Steuerelement nicht den Fokus, wir sehen, was das ausgewählte Element fortzusetzen.
  • ListView1.FocusedItem.EnsureVisible () zu zwingen, das ausgewählte Element zu sein immer sichtbar.

Nun, wenn der Code:

     Private Sub Form1_Load (ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
         ListView1.HideSelection = False
         ListView1.FullRowSelect = True
         ListView1.MultiSelect = False
     End Sub

     Private Sub Button1_Click (ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
         Static i As Integer = 0
         i + = 1
         ListView1.Items.Add (New ListViewItem ("Artikelnummer" & i))
         ListView1.Items (ListView1.Items.Count - 1). Selected = True
         ListView1.Items (ListView1.Items.Count - 1). Focused = True

         ListView1.FocusedItem.EnsureVisible ()
     End Sub

Beim Ausführen sollte sehr ähnlich sehen, dass in diesem Bild gezeigt:

listviewItemSiempreVisible002

Das ist alles, wenn diese Informationen geholfen haben, hinterlassen Sie bitte einen Kommentar.

11. Die Antworten auf "Listenansicht: Item always on top"

  1. Bitacoras.com Information ...

    Rate in Bitacoras.com: Wenn ListViewItems neuer Elemente zu einem ListView-Steuerelement hinzugefügt werden, und diese sind so zahlreich, dass die Steuerung nicht über genügend Speicherplatz, um sie auf dem Bildschirm anzuzeigen, fügen Sie eine vertikale Scroll-Leiste. Dies ist ... ..

  2. MYSTIC sagte:

    Nun wissen wir alle, q, um die Daten, sondern meine q Ich bin daran interessiert, wenn sie erklären können, wie ein Modul in das Programm gespeichert ist angezeigt werden gesägt aunq

  3. RCHARD sagt:

    Beispiel eine, die gleiche Frage Aber ich möchte wissen, ob eine DataGridView in diesem Problem helfen könnte

    Meine E-Mail:
    richardramos789@hotmail.com
    Sie wäre dankbar, wenn Sie mir helfen

  4. Jorge sagt:

    Hallo, wie,

    Schau, ich habe Zweifel mit einer Listenansicht, in meinem System zu implementieren, ich bin der Zusammenstellung eines POS-Systems und der Eingabe eines Codes auf meinem txtbox Errungenschaft in meinem listview korrekt gedruckt, meine Frage ist, dass ich bei der Anmeldung das gleiche Produkt möchten, anstatt eine neue Zeile wird es aufgenommen und in der Spalte Menge wird sich die Zahl zu erhöhen.

    Zum Beispiel, wenn i 12345 hinzufügen, ist in meinen listview gedruckt, aber wenn ich 12345 auf Druck auf eine neue Zeile Platz hinzuzufügen, ist in einer Reihe gedruckt, aber dieser Betrag erhöht sich auf Spalte 2, wenn ich nicht erklären oder konnte mich in dieser Frage, dass ich ich würde es sehr schätzen, zu führen.

    • Elisha sagt:

      nicht sehr für mich klar, was sie tun wollen, aber ich schlage vor, Sie bei diesem Beispiel sinnvoll sein, aussehen könnte: http://www.solovb.net/index.php/2009/02/19/modificar-datos- of-a-listview /
      Haben Sie weitere Fragen zögern Sie nicht mich zu kontaktieren.

      Grüße

    • Oscar sagt:

      Hallo George, was Sie fragen beinhaltet Datenpersistenz und auf eine Säule gehören in den Rang eines bestimmten Schlüssel in einer Tabelle mit 2-Lösungen können Sie wählen, update: Zunächst erstellen Sie ein DB mit den von Ihnen benötigten Felder und verwenden Sie ein MySQL-Verbindung entweder zu verwenden oder den Adapter in SQL Server Visual Studio enthalten ist, wird der andere Weg durch flache Dateien in einer Datei gespeicherten Daten. txt und dann fahren Sie mit dem Lesen und Umschreiben von ein paar Daten , für beide Optionen, wie Sie den Wert für eine Spalte rewquerida erhöhen müssen, sollten Sie auch eine Funktion, dass dieser Wert unter der Bedingung, die Sie benötigen Basis zu erhöhen. :)

  5. Jorge sagt:

    Elisha ich danke Ihnen sehr für Ihre prompte Antwort.

    Ok schaue ich werde erklären. Ich habe eine TextBox, in denen ich hinzufügen, die Produkte habe ich in meiner DB, ok zum Beispiel Coca-Cola, geben Sie den Barcode auf meinem TextBox in diesem Fall würde 12345678 sein, eine gute Darstellung in meinem listview der Produktbeschreibung mit meinem Spalten listview sind:

    Product Code, Bezeichnung, Menge, Verkaufspreis, Existence.

    Dann fügen Sie das Produkt an meiner Linie ist voll von solchen Daten in meinem listview, aber wenn ich wieder fügen Sie den Code von Coca-Cola wird in einem nächsten Zeile, die Ich mag zu tun gezeigt, dass wenn Sie ein anderes einfügen Einmal im Ort das gleiche Produkt in einer neuen Zeile angezeigt wird, ändern Sie einfach die Zahl meiner Spalte Menge, in diesem Fall den Austausch zu 2.

    Das ist mehr, als ich nd tun, wenn ich mehr oder weniger sagen konnte diese Frage zu beantworten, ich würde es zu schätzen wissen wollen.

    Dank

    • Elisha sagt:

      Nun, das ist jetzt ein wenig leichter.

      Das erste, was Sie vor dem Einlegen nicht eine neue Zeile zur Listenansicht überqueren, um zu überprüfen, wenn Sie bereits den Code, den Sie versuchen, einzufügen sind eingegeben haben.
      Dass man mit einem zu tun For Each, zum Beispiel

      "Ich denke, eine Variable zu mir, wenn der Code zu erzählen und fand, dass es
      Dim vorhanden As Boolean = False
      Für jedes Element als ListViewItem in listviewProductos.items
      Dann, wenn item.text = txtCodigo.text
      "Wenn du hierher gekommen ist, weil es bereits geladen wurde
      cantidadAnterior dim as Integer = CType (item.subitm (2). Text, Integer)
      item.subitem (2). cantidadAnterior + text = CType (txtCantidad.text, Integer)
      "Wenn Sie merken, Sie fanden es existierte bereits
      Es = True
      end if
      Nächste

      Wenn nicht, dann gibt es
      'Hier füge ich es aber gefunden
      End if

      Nun, dienen Espro Sie ... Sie können nicht ausschließen, ein Tippfehler golde seit ich es geschrieben habe direkt hier

      Aber es ist sicher servieren Ihnen

  6. Jorge sagt:

    Nochmals vielen Dank,

    Schauen Sie mich an, ich bemerkte, dass, wenn das Ergebnis in Frage zu ändern den Wert der Spalte Menge gegeben hat, was passiert ist, dass ich das Extrahieren von Werten aus einer MySQL-Datenbank befasst sich mit den Code, den ich Ihnen, wie meine listview drucken, um zu zeigen

    Listview Private Sub ()
    Dim i As Integer
    Dim s As Integer
    Dim count As Integer
    Zwischensumme Dim As Double
    Dim Liste As New ListViewItem

    As New MySqlCommand Dim Zeichenfolge ("SELECT * FROM Produkte WHERE ProductCode = '" & txtCodigoBarras.Text & "'", con)

    cadena.ExecuteReader mysqldr = ()

    Während mysqldr.Read ()
    list = listView1.Items.Add (txtCodigoBarras.Text.Trim)
    listar.SubItems.Add (CStr (mysqldr ("Description")))
    listar.SubItems.Add (CStr (mysqldr ("Menge")))
    listar.SubItems.Add (CStr (mysqldr ("PrecioVenta")))
    listar.SubItems.Add (CStr (mysqldr ("Stock")))
    End While

    Dim vorhanden As Boolean = False

    Für jedes Element als ListViewItem In ListView1.Items
    Wenn txtCodigoBarras.Text Dann item.Text =
    CantidadAnterior Dim As Integer = CType (listar.SubItems (2). Text, Integer)
    listar.SubItems (2). cantidadAnterior + Text = CType (mysqldr ("Menge"), Integer)
    Es = True
    End If
    Nächste
    Wenn nicht, dann gibt es
    End If

    lblCantidadProd.Text = mysqldr.Item (3)
    lblPrecioUnidad.Text = mysqldr.Item (5)

    Für s = 0,0 bis ListView1.Items.Count - 1
    Zwischensumme = Zwischensumme + ListView1.Items (s). SubItems (3). Text
    Nächste
    lbLSubTotal.Text = "$" & Format (Zwischensumme, "0,00")

    For i = 0 To ListView1.Items.Count - 1
    Zähler = Zähler + ListView1.Items (i). SubItems (2). Text
    Nächste
    Me.lblContador.Text = Zähler

    mysqldr.Close ()
    End Sub

    Ich habe den Code, die es implementiert gut und die Ergebnisse in das folgende Foto:

    http://img193.imageshack.us/img193/4421/productosv.jpg

  7. Jorge sagt:

    Freund haha ​​sorry, wenn es dich stört so viele Fragen, aber ich finde mehr oder weniger das Problem, stellen das Produkt zB

    DORITOSNAC

    Ist in der ersten Reihe eingefügt und wenn ich legte DORITOSNAC ist in der zweiten Reihe gedruckt, aber schon wurden die ersten Änderungen seines Wertes von Quantität zu 2 und geben Sie wieder in einem 3 Zeilen gedruckt, sondern auch die 1 Zeile ändert den Wert auf 3

    Wenn txtCodigoBarras.Text Dann txtCodigoBarras.Text =
    Dim vorhanden As Boolean = False
    Für jedes Element als ListViewItem In ListView1.Items
    Wenn txtCodigoBarras.Text Dann item.Text =
    CantidadAnterior Dim As Integer = CType (item.SubItems (2). Text, Integer)
    item.SubItems (2). cantidadAnterior + Text = CType (lblCantidadProd.Text, Integer)
    Es = True
    End If
    Nächste
    Wenn nicht, dann gibt es
    End If

    Mal sehen, ob ich es jetzt, wenn keine Erklärung Ihrerseits werden Ihnen dankbar sein zu bekommen.

  8. Jorge sagt:

    bereits gelöst vielen Dank für Ihre Unterstützung erhalten die Lösung:

    Dim count As Integer
    Für j As Integer = 0 To Me.ListView1.Items.Count - 1
    Wenn Me.ListView1.Items (j). SubItems (0). TxtCodigoBarras.Text Dann Text =
    count = CInt (Me.ListView1.Items (j). SubItems (2). Text) + 1
    Me.ListView1.Items (j). SubItems (2). Text = count
    Exit Sub

Kommentar