Benutzer-Werkzeuge

Webseiten-Werkzeuge


k17:k17.5:k17.5.1:start

17.5.1 ColumnView Projekt 1

Das Projekt demonstriert neben der Verwendung von Eigenschaften des Steuerelements ColumnView die Sortierung der Daten und besonders den Einsatz der diversen Move()-Methoden.

B1

Abbildung 17.5.1.1: Programmfenster – Sortierung nach Nachnamen eingeschaltet

Sie können jederzeit neue (Zufalls)Daten erzeugen (12 Elemente). Es ist von Vorteil, wenn Sie ein Element als Zeile in einer ColumnView auffassen.

Public Sub btnNewData_Click()
 
  covData.Clear() ' Inhalt der ColumnView löschen. Gilt nicht für die optionale Kopf-Zeile!
  SetData(12) ' 12 Elemente mit Zufallsdaten neu einfügen
 
' Markierung des ersten Elementes - wenn mindestens eins existiert
  If Not covData.MoveFirst() Then covData.Key = covData.Item.Key
  txbCurrentKey.Text = covData.Item.Key
 
End
 
Private Sub SetData(iCount As Integer)
 
  Dim i As Integer
 
  Dim aFirstNames As String[] = ["Hans", "Maria", ..., "Robert", "Stefan", "Emma", "Yvonne", "Claus"]
  Dim aSurNames As String[] = ["Meyer", "Lehmann", ..., "Müller", "Grahn", "Kaiser", "Vogt", "Zechlin"]
  Dim aPictures As String[] = ["led_green16.png", "led_red16.png", "led_blue16.png"]
 
  For i = 1 To iCount 
    covData.Add(Str(i), Str(i), Picture[aPictures[Rand(0, aPictures.Max)]])		' 1. Spalte + Bild
    covData[Str(i)][1] = aFirstNames[Rand(0, aFirstNames.Max)]				' 2. Spalte
    covData[Str(i)][2] = aSurNames[Rand(0, aSurNames.Max)]					' 3. Spalte
    covData[Str(i)][3] = Format$(Date(CFloat(Now() - Rnd(7000, 8200))), "dd.mm.yyyy")	' 4. Spalte
  Next
 
End

Die Daten können auch sortiert ausgegeben werden (→ CheckBox), wobei die Daten zuerst nach der 3. Spalte 'Nachname' sortiert werden. Anschließend können alle weiteren Spalten ebenso sortiert werden.

Public Sub ckboxSorting_MouseDown()
 
  txbCurrentKey.Text = covData.Item.Key
 
  If ckboxSorting.Value = True Then
     covData.Sorted = False
  Else
     covData.Sorted = True            ' Es soll sortiert werden!
     covData.Columns.Ascending = True ' A → Z
     covData.Columns.Sort = 2         ' Sortieren nach Nachname
  Endif 
 
End

Den internen Zeiger können Sie sofort zum ersten oder zum letzten Element bewegen, sofern es mindestens ein Element gibt – was geprüft wird. Damit Sie die aktuelle End-Position sehen können, werden das erste oder das letzte Element anschließend markiert:

Public Sub btnFirst_Click()
 
  If covData.Count > 0 Then ' Es existiert mindestens ein Element ...
     covData.MoveFirst()
     txbCurrentKey.Text = covData.Item.Key
   ' Element markieren (ColumnView ohne Focus: Markierung grau)
     covData.Key = covData.Item.Key
  Endif
 
End
 
Public Sub btnLast_Click()
 
  If covData.Count > 0 Then ' Es existiert mindestens ein Element ...
     covData.MoveLast()
     txbCurrentKey.Text = covData.Item.Key
   ' Element markieren (ColumnView ohne Focus: Markierung grau)
     covData.Key = covData.Item.Key
  Endif
 
End

Von jeder beliebigen Position aus können Sie den internen Zeiger schrittweise zum ersten oder zum letzten Element bewegen:

Public Sub btnUp_Click()
 
  If covData.Count > 0 Then ' Existiert mindestens ein Element ...
     If Not covData.MoveAbove() Then 
        txbCurrentKey.Text = covData.Item.Key & " : " & covData.Item[1]
        covData.Key = covData.Item.Key
     Else
        covData.MoveFirst()
     Endif
  Endif
 
End
 
Public Sub btnDown_Click()
 
  If covData.Count > 0 Then ' Existiert mindestens ein Element ...
     If Not covData.MoveBelow() Then 
        txbCurrentKey.Text = covData.Item.Key & " : " & covData.Item[1]
        covData.Key = covData.Item.Key
     Else
        covData.MoveLast()
     Endif
  Endif
 
End

Von jeder beliebigen Position aus können Sie den internen Zeiger vom ersten bis zum letzten Element bewegen (Iteration). Diese Prozedur ist gut geeignet, um Daten aus einer ColumnView auszulesen oder in eine ColumnView einzulesen. Da die Markierung ausgeschaltet ist, um die Unabhängigkeit des internen Zeigers vom äußeren (Markierungs-)Zeiger zu demonstrieren, erkennen Sie die aktuelle Position bei der Iteration in der Textbox (Key und Text der 1. Spalte):

Public Sub btnIterationDown_Click()
 
  Dim iLastKey As Integer
 
  If covData.Count > 0 Then ' Es existiert mindestens ein Element ...
     iLastKey = covData.Key ' Start-Key speichern für ***
  Endif
 
' Den internen Zeiger auf das oberste Element setzen, wenn das möglich ist
  If Not covData.MoveFirst() Then ' Wenn mindestens ein Element existiert ...
     Repeat ' ... dann Iteration vom obersten Element
       txbCurrentKey.Text = covData.Item.Key & " : " & covData.Item[1]
     ' covData.Key = covData.Item.Key ' Element markieren abgeschaltet
       Wait 0.4
     ' Hier weitere Anweisungen zur Verarbeitung von Daten aus der ColumnView: Zum Beispiel
     ' Print covData.Item[0]; gb.Tab; covData.Item[1]; gb.Tab; covData.Item[2]; gb.Tab; covData.Item[3]
     Until covData.MoveBelow() ' ... bis das letzte Element in der ColumnView erreicht ist
     covData.MoveTo(iLastKey) ' ***
  Endif
 
End

Um den Quelltext vollständig anzugeben, wird u.a. gezeigt, wie das Layout der ColumnView festgelegt wird und Startwerte gesetzt werden:

Public Sub Form_Open()
 
  FMain.Resizable = False
 
  With covData  
   ' Anzahl der Spalten festlegen
    .Columns.Count = 4
 
    .Header = True ' Kopfzeile anzeigen
   ' Header-Spalten-Namen festlegen
    .Columns[0].Text = ("RGB")
    .Columns[1].Text = ("Vorname")
    .Columns[2].Text = ("Nachname")
    .Columns[3].Text = "Geburtsdatum"
   ' Spalten-Weite festlegen
    .Columns[0].Width = 25
    .Columns[1].Width = 130
    .Columns[2].Width = 130
    .Columns[3].Width = 150
   ' Spalten-Ausrichtung festlegen
    .Columns[0].Alignment = Align.Center
    .Columns[1].Alignment = Align.Normal
    .Columns[2].Alignment = Align.Normal
    .Columns[3].Alignment = Align.Center
 
    .Mode = Select.Single
    .Sorted = False ' Es soll *nicht* sortiert werden!
    .AutoResize = True 
    .Resizable = True
  End With
 
  ckboxSorting.Value = ckboxSorting.False
  SetData(12)
 
' Markierung des 7. Elementes
' If covData.Count > 0 Then ' Es existiert mindestens ein (oberes) Element ...
  If Not covData.MoveFirst() Then ' Es existiert mindestens ein (oberes) Element ...
     If covData.MoveTo(7) = True Then ' Wenn ein Fehler auftrat ...
        covData.MoveBack() ' ... dann zurück zum Ausgangselement
        covData.Key = covData.Item.Key ' Element markieren
     Else
      ' Element markieren (ColumnView hat Focus → Markierung hellgrün (Mint 17.3))
        covData.Key = covData.Item.Key
     Endif
  Endif
 
End
 
Public Sub ckboxSorting_MouseDown()
 
  txbCurrentKey.Text = covData.Item.Key
 
  If ckboxSorting.Value = True Then
     covData.Sorted = False
  Else
     covData.Sorted = True            ' Es soll sortiert werden!
     covData.Columns.Ascending = True ' A → Z
     covData.Columns.Sort = 2         ' Sortieren nach Nachname
  Endif 
 
End
 
Public Sub Form_Close()
  FMain.Close()
End

Download

Die Website verwendet zwei temporäre Session-Cookies. Diese technisch notwendigen Cookies werden gelöscht, wenn der Web-Browser geschlossen wird! Informationen zu Cookies erhalten Sie in der Datenschutzerklärung.
k17/k17.5/k17.5.1/start.txt · Zuletzt geändert: 22.01.2018 (Externe Bearbeitung)

Seiten-Werkzeuge