| |
VB.NET - Ein- und UmsteigerListview Muster erkennen | | | Autor: Opossum01 | Datum: 04.12.22 11:45 |
| Hi,
mit diesem Code benenne ich Muster in einer Listview
For Each lva As ListViewItem In Form1.lv.Items
If lva.SubItems(1).Text = "17" And lva.SubItems(4).Text = "22" Then
lva.SubItems(7).Text = "Muster1"
lva.BackColor = Color.AliceBlue
End If
Next
For Each lva As ListViewItem In Form1.lv.Items
If lva.SubItems(1).Text = "8" And lva.SubItems(4).Text = "28" Then
lva.SubItems(7).Text = "Muster2"
lva.BackColor = Color.Aqua
End If
Next
Jetzt würde ich gerne horizontale Muster erkennen in lva.SubItems(3)
25,89,185,281,377,473,537 und ---> Muster3
89,185,281,377,473,537 ---> Muster4
Problem ist das alles relativ gleich ist, das eine Muster aus 7 Zeilen besteht das andere nur aus 6 Zeilen.
Hat jemand eine Idee, wie ich dieses Problem lösen kann ? | |
Re: Listview Muster erkennen | | | Autor: Manfred X | Datum: 04.12.22 14:18 |
| Hallo!
Beschreibe Deine Fragestellung korrekt und vollständig.
Wie wird ein Muster als solches erkannt?
Können sich z.B. die Muster-Zahlenreihen überlappen?
Können bestimmte Zahlen(folgen) in einem Muster mehrfach vorkommen?
Hebt ein längeres Muster ein darin vollständig enthaltenes kürzeres Muster auf?
Eventuell:
Zuerst in allen Zeilen nach dem längsten Muster suchen und die "betroffenen" Zeilen markieren.
Danach das zweit-längste Muster in den noch unmarkierten Zeilen suchen, diese markieren usw.
Beitrag wurde zuletzt am 04.12.22 um 14:28:53 editiert. | |
Re: Listview Muster erkennen | | | Autor: Opossum01 | Datum: 04.12.22 14:51 |
| Hi,
das Muster soll als solches erkannt werden, wenn diese Zahlen direkt 25,89,185,281,377,473,537 untereinander stehen.
7 Zahlen in Reihenfolge wäre Muster 3.
Die gleichen Zahlen können untereinander stehen, es fehlt aber die 25. Also sind es hier nur 6 Zahlen wäre Muster 4.
In der Listview können die gleichen Folgen mehrmals vorkommen, haben dann aber in lva.SubItems(3) andere Werte.
Ein längeres Muster hebt ein kürzeres auf.
Lauter Sachen an die ich noch garnicht gedacht habe.
Für eine kleines Beispiel wäre ich sehr dankbar. | |
Re: Listview Muster erkennen | | | Autor: Manfred X | Datum: 04.12.22 15:40 |
| Annahme: Muster überlappen sich nicht
Winforms-Formular
Public Class frmListMuster
Dim lv As New System.Windows.Forms.ListView With {.Parent = Me, .Size = New _
Size(400, 400), .View = View.Details}
Dim musters As New List(Of Integer())
Dim colors As New List(Of Color)
Private Sub frmListMuster_Load(sender As Object, e As EventArgs) Handles _
MyBase.Load
'Muster (nach Länge geordnet)
musters.Add({25, 89, 185, 281, 377, 473, 537})
musters.Add({89, 185, 281, 377, 473, 537})
'..............
'Markierfarben der Muster
colors.Add(Color.Cyan)
colors.Add(Color.Yellow)
'...............
Dim basecolor As Color = Color.White
'Testdaten
lv.Columns.Add("Ziffernfolge")
For i As Integer = 0 To musters.Count - 1
For k As Integer = 0 To musters(i).Length - 1
lv.Items.Add(musters(i)(k))
Next k
Next i
lv.Items.Add(1234)
For i As Integer = 0 To musters.Count - 1
For k As Integer = 0 To musters(i).Length - 1
lv.Items.Add(musters(i)(k))
Next k
Next i
'Markieren der gefundenen Musterfolge
Dim ok As Boolean
'Schleife über alle Muster
For m As Integer = 0 To musters.Count - 1
'Schleife über die Items für Suche nach Muster m
For it As Integer = 0 To lv.Items.Count - 1
ok = True
'Schleife über Ziffernfolge vom Muster m
For k As Integer = 0 To musters(m).Length - 1
If it + k > lv.Items.Count - 1 Then
ok = False : Exit For
End If
If Not ColorsEqual(lv.Items(it + k).BackColor, basecolor) Then
ok = False : Exit For
End If
If CInt(lv.Items(it + k).Text) <> musters(m)(k) Then
ok = False : Exit For
End If
Next k
If ok Then
'Muster m ab Item It markieren mit color(m)
For k As Integer = 0 To musters(m).Length - 1
lv.Items(it + k).BackColor = colors(m)
Next k
End If
Next it
Next m
End Sub
Private Function ColorsEqual(c1 As Color, c2 As Color) As Boolean
If c1.R <> c2.R Then Return False
If c1.G <> c2.G Then Return False
If c1.B <> c2.B Then Return False
Return True
End function
Beitrag wurde zuletzt am 04.12.22 um 15:43:22 editiert. | |
Re: Listview Muster erkennen | | | Autor: Opossum01 | Datum: 04.12.22 19:09 |
| Danke schön,
hat mir sehr geholfen.
Die farbige Einordnung ist für den Anfang sehr hilfreich, damit ich einen optischen Überblick bekomme.
Gibt es auch eine Möglichkeit, das Ganze in
lva.SubItems(8).Text = "Muster3" zu benennen, welches Muster gefunden wurde ? | |
Re: Listview Muster erkennen | | | Autor: Manfred X | Datum: 04.12.22 21:12 |
| Jetzt sind die Muster in der Liste musters indiziert mit 0,1,....
Einfach in der Markierschleife, in der jeweils dem Item mit Index i+k
die Backcolor m zugewiesen wird, in Spalte 8 dieses Items die Nummer m
eintragen. | |
Re: Listview Muster erkennen | | | Autor: Opossum01 | Datum: 06.12.22 20:48 |
| Hallo Manfred,
ich verstehe was du meinst. Leider bekomme ich es nicht aufs Blatt.
Du meinst diesen bereich ?
For k As Integer = 0 To musters(m).Length - 1
lv.Items(it + k).BackColor = colors(m)
Next k | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
Neu! sevCoolbar 3.0
Professionelle Toolbars im modernen Design!
Mit sevCoolbar erstellen Sie in wenigen Minuten ansprechende und moderne Toolbars und passen diese optimal an das Layout Ihrer Anwendung an (inkl. große Symbolbibliothek) - für VB und MS-Access Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|