vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Visual-Basic Einsteiger
Re: Listbox mit vbTab Zahlen sorten 
Autor: Manfred X
Datum: 01.05.24 11:17

Hallo!

Da ist ein C zu viel drin.
Die CINT-Methode rundet, die INT-Methode gibt den ganzzahligen Anteil.
r = CInt((dbl(i + 1) - Int(dbl(i + 1))) * 10000)
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Listbox mit vbTab Zahlen sorten 
Autor: Hank-15
Datum: 25.04.24 21:47

Hallo

ich wollte gern in mein Programm die 3 meist Aufgerufenen in Labels anzeigen.
eben Platz 1 Platz 2 und Platz 3

Das Problem ist die Listbox weil z.B. 120 vbTab Mario usw

ich hab schon einiges versucht aber es klappt nicht

For bn = 0 To ListBesten3.ListCount - 1
 If LblBGTemp.Caption > ListBesten3.List(bn) Then ListBesten3.List(bn) = _
   LblBGTemp.Caption & vbTab & LblInfo(0).Caption
Next
Danke 😀
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Listbox mit vbTab Zahlen sorten 
Autor: ModeratorDieter (Moderator)
Datum: 26.04.24 07:47

Aus deiner Problem-Beschreibung werde ich nicht wirklich schlau.
Was meinst du mit den meist Aufgerufenen?
Und was hat die ListBox damit zu tun?

_________________________
Professionelle Entwicklerkomponenten
www.tools4vb.de

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Listbox mit vbTab Zahlen sorten 
Autor: Manfred X
Datum: 26.04.24 11:27

Hallo!

So weit ich das verstanden habe ....

Vor der Schleife sind drei Integer-Variable zu definieren (max_aufrufe, aufrufe, max_index).
In der Schleife wird mit der INSTR-Methode die Zahl im Eintrag (bn) ermittelt (vbTab-Position)
und in die Integer-Variable "aufrufe" konvertiert.
Diese Zahl wird jeweils mit "max_aufrufe" verglichen und ggf. dort eingetragen (falls größer).
Zusätzlich wird in dem Fall der zugehörige Index (bn) in "max_index" übernommen.

Nach dem Durchlaufen der Schleife wird der Listeneintrag "max_index" ins Label eingetragen.

Für die Ermittlung des zweitgrößten Eintrags wird ebenso verfahren,
allerdings wird in der Schleife der Eintrag bei "max_index" ignoriert (IF not bn = max_index then ...).
Vor dieser Schleife wird "max_index2" als Integer deklariert und wie oben zum Speichern
des Listen-Index verwendet.

Nach dem Durchlaufen der Schleife wird der Listeneintrag "max_index2" im Label angehängt.

usw.

Beitrag wurde zuletzt am 26.04.24 um 11:29:09 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Listbox mit vbTab Zahlen sorten 
Autor: Hank-15
Datum: 27.04.24 00:40

Also besser gesagt die 3 mit den meisten Punkten.

Listbox

15 Hans
59 Peter
35 Klaus


Sortiert

15 Hans
35 Klaus
59 Peter


nun wollte ich die 15 Hans mit dem näxten vergleichen (z.b) 55 Andree, nun wollte ich den Hans mit den 15 Punkten überschreiben
und die listbox wieder sortieren

35 Klaus
55 Andree
59 Peter

speichern und gut
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Listbox mit vbTab Zahlen sorten 
Autor: Manfred X
Datum: 27.04.24 14:23

Hallo!

Überschreiben?
Ich verstehe nicht, wonach gefragt wird.

Du hast also die Einträge in einer Listbox ansteigend sortiert.
Wenn sich ein potentieller neuer Eintrag ergibt (Andree),
soll zunächst geprüft werden, ob dieser mögliche Eintrag einen höheren
Wert hat als der Eintrag mit dem niedrigsten Wert in der Liste
(direkter Vergleich der Punktwerte).

Nur falls dies der Fall ist, wird der Eintrag mit dem niedrigsten Wert
aus der Liste gelöscht (=erster Wert in der sortierten Liste),
der neue Eintrag hinzugefügt und die Liste danach wieder sortiert.
Anderenfalls bleibt die Liste unverändert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Listbox mit vbTab Zahlen sorten 
Autor: Hank-15
Datum: 27.04.24 16:08

nein die liste lässt sich ja mit .sorted nicht nach zahlen sortieren. wie man listen mit zahlen sortiert weiss ich nur der Hacke an der Sache ist Zahl vbTab Name weil da hörts auf ich bekomm nur fehlermeldungen

Meine Idee wäre eben nach Zahlen sortieren inkl. Name und der kleinste wert wäre Index 0 oder Index 3 wie auch immer

Nun kann ich den kleinsten wert wenn er z.B. index 0 ist, damit verlgeichen und wenn der neue Wert grösser ist, den im Index 0 ersetzen und wieder sortieren
Was anderes fällt mich nicht ein wie das sonst gehen kann 😞

15 Hans
65 Klaus
155 Peter

nun kommt der Andree mit 72 somit ist 72 grösser als die 15 (logisch) und ich wollte den Andree nun mit Hans ersetzen.
und wieder neu sortieren ego...

65 Klaus
72 Andree
155 Peter

so wär das Ergebnis undgefähr
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Listbox mit vbTab Zahlen sorten 
Autor: Kuno60
Datum: 27.04.24 17:10

Die VB6-Listbox unterstützt nur Zeichenfolgen. Beim Sortieren werden die Einträge alphabetisch sortiert und nicht nach Zahlenwert.
Eine Möglichkeit wäre, alle Zahlen auf die gleiche Länge zu bringen, durch führende Nullen.
List1.AddItem ("013" & vbTab & "Otto")
List1.AddItem ("067" & vbTab & "Franz")
List1.AddItem ("004" & vbTab & "Gerd")
List1.AddItem ("035" & vbTab & "Peter")
List1.AddItem ("117" & vbTab & "Ina")
List1.AddItem ("094" & vbTab & "Hubert")
Wenn Sorted = True ist, werden so die Einträge richtig sortiert.

004 Gerd
013 Otto
035 Peter
067 Franz
094 Hubert
117 Ina

Eine andere Möglichkeit wäre, die Zahlen in einen Zahlenwert umzuwandeln (z.B. Integer), diese dann sortieren und dann der ListBox in der richtigen Reihenfolge hinzufügen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Listbox mit vbTab Zahlen sorten 
Autor: Hank-15
Datum: 28.04.24 16:10

Danke ich weiss das die Listboxen nur alpha und genau das ist mein problem

Dim v As Variant
 
Private Sub Form_Load()
 'List1.AddItem 125 & vbTab & "Hank": List1.AddItem 15 & vbTab & "Danny": 
 ' List1.AddItem 19 & vbTab & "Robby"
 List1.AddItem 125: List1.AddItem 15: List1.AddItem 19
End Sub
 
Private Sub Label1_Click()
 Dim Liste() As Long 'bei kommazahlen long durch double ersetzen...
 Dim i As Integer
 
 ReDim Liste(List1.ListCount)
 
 For i = 0 To List1.ListCount - 1
  v = Split(List1.List(i))
  Liste(i + 1) = CLng(List1.List(i)) 'dann auch das clng durch ein cdbl ersetzen
 Next
 
 Quicksort 1, UBound(Liste), Liste
 
 List1.Clear
 For i = 1 To UBound(Liste)
 List1.AddItem Liste(i)
 Next
End Sub
 
Private Sub Quicksort(ByVal L As Long, ByVal R As Long, ByRef mA() As Long) _
  'hier das letzte long ggf auch anpassen
 Dim i As Integer
 Dim j As Integer
 Dim M As Long
 Dim Tmp As Long
 
 If R <= L Then Exit Sub
 
 i = L
 j = R
 M = mA((L + R) / 2)
 
 Do
  Do While mA(i) < M
   i = i + 1
  Loop
 Do While mA(j) > M
  j = j - 1
 Loop
  If i <= j Then
   Tmp = mA(i)
   mA(i) = mA(j)
   mA(j) = Tmp
   i = i + 1
   j = j - 1
  End If
 Loop Until i > j
 If L < j Then Quicksort L, j, mA()
 If i < R Then Quicksort i, R, mA()
End Sub
das funktioniert aber nur ohne namen
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Listbox mit vbTab Zahlen sorten 
Autor: Hank-15
Datum: 30.04.24 07:49

und wie kommt nun der Gerd und der Otto und die anderen zu ihren nullen?? und ich muss die nullen wieder wegbekommen weil

Platz 1 Gerd 0015
Platz 2 Otto 0155
Platz 3 Frant 1067

sieht nicht schön aus finde ich


Danke
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Listbox mit vbTab Zahlen sorten 
Autor: Manfred X
Datum: 30.04.24 17:36

Hallo!

Mache es halt "dirty".
Deklariere ein Double-Array in Listenlänge und gehe die Liste in einer Schleife durch.
Extrahiere bei jedem Eintrag die Zahl, addiere den durch 1000 dividierten Index
und trage diesen Wert ins Array ein.
Sind es mehr als 999 Einträge in der Liste, dann halt Division durch 10000.
(Die Zahlenwerte in den Einträgen dürfen aber nicht mehr als fünf- bzw. vier-stellig sein.)

Sortiere das Double-Array (numerisch).

Erstelle ein String-Array in Listenlänge und eine Integer-Variable (index).
Danach kannst Du das sortierte Array in einer Schleife (Schleifen-Variable i) durchgehen.
Ziehe jeweils vom Doublewert den Ganzzahl-Anteil ab und multiplizierte das Ergebnis mit 1000(0) (in "Index").
Jetzt weißt Du, welcher Listbox-Index-Eintrag an die Stelle des aktuellen Schleifen-Index gehört.
string_array(i) = listbox.list(index)

Die Array-Elemente kannst Du dann über eine Schleife in die geleerte Listbox eintragen.

Wie gesagt: dirty!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Listbox mit vbTab Zahlen sorten 
Autor: Hank-15
Datum: 30.04.24 20:26

ok danke aber wie sieht sowas in VB-Code aus??

Danke
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Listbox mit vbTab Zahlen sorten 
Autor: Kuno60
Datum: 30.04.24 22:10

Übrigens funktioniert die Sortierung auch, wenn du die Nullen durch Leerzeichen (" ") ersetzt.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Listbox mit vbTab Zahlen sorten 
Autor: Manfred X
Datum: 01.05.24 03:09

Hallo!

Tja, ich benutze seit Jahren VB6 nicht mehr.

Mal angenommen, man hätte eine Listbox "List1" auf das Formular gezogen ....

Public Sub SortDemo()
 
  'Hilfsvariablen
  Dim i As Integer, k As Integer, r As Integer, num As String
 
  'Referenz auf die Listbox besorgen (optional)
  Dim lbo As ListBox
  Set lbo = List1
 
  'gleichabständige Schrift einstellen
  lbo.Font.Name = "Courier"
 
  'Testeinträge in die Liste schreiben / zufällige Punktwerte
  Randomize
  For i = 0 To 2000
     r = CInt(Rnd * 10000)
     num = CStr(r)
     While Len(num) < 5
       num = " " & num
     Wend
     lbo.AddItem (num & " " & vbTab & "bla bla bla")
  Next i
 
  'Aufbau des Hilfsarray für das Sortieren
  Dim dbl() As Double
  ReDim dbl(1 To lbo.ListCount)
  Dim pos As Integer
  For i = 0 To lbo.ListCount - 1
     pos = InStr(lbo.List(i), vbTab)
     dbl(i + 1) = Mid(lbo.List(i), 1, pos - 1) + i / 10000   
  Next i
 
  'simple Sortier-Doppelschleife 
  Dim inter As Double
  For i = 1 To UBound(dbl) - 1
     For k = i + 1 To UBound(dbl)
        If dbl(i) > dbl(k) Then
           inter = dbl(i)
           dbl(i) = dbl(k)
           dbl(k) = inter
        End If
     Next k
  Next i
 
  'Aufbau eines sortierten Stringarray 
  'aus der Listbox-Liste und dem Hilfsarray
  Dim str() As String
  ReDim str(0 To lbo.ListCount - 1)
  For i = 0 To UBound(str)
      r = CInt((dbl(i + 1) - CInt(dbl(i + 1))) * 10000)
      str(i) = lbo.List(r)
  Next i
 
  'Übertragen des String-Array in die geleerte Listbox
  lbo.Clear
  For i = 0 To UBound(str)
    lbo.AddItem (str(i))
  Next i
 
End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Listbox mit vbTab Zahlen sorten 
Autor: Hank-15
Datum: 01.05.24 08:48

Ja genau das ises 👌

Daaanke 😀👍
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Listbox mit vbTab Zahlen sorten 
Autor: Hank-15
Datum: 03.05.24 10:25

Danke nochmals an alle Helfer 😀

AAaaaaber irgendetwas läuft da nicht rund

Wenn ich z.B. Otto mit 65 hinzufüge geht das aber sobald die zahl 100 oder höher ist funktioniert das nicht mehr

Dim v as Variant
Dim lbgt as String
 
Private Sub LblBGTemp_Change()
 lbgt = Trim(LblBGTemp.Caption)
End Sub
 
Private Sub LblBildMenü_Click(Index As Integer)
 if Index = 1 Then
  If ListBesten3(smb).ListCount = 5 Then
   v = Split(ListBesten3(smb).List(0), vbTab)
   If lbgt > v(0) Then ListBesten3(smb).List(0) = LblBGTemp.Caption & vbTab _
     & LblInfo(0).Caption
  End If
 End If
End Sub
auch wenn ich die Variable lbgt durch LblBGTemp.Caption ersetze macht das kein unterschied.

Woran liegt das nun und wie bekomm ich das hin??

Danke
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Listbox mit vbTab Zahlen sorten 
Autor: Manfred X
Datum: 03.05.24 15:51

Hallo!

Befasse Dich zunächst mit Datentypen.
Konvertiere Strings, die Ziffernfolgen enthalten in Integer-Werte (v(0), lbgt),
ehe du vergleichst. Solche Zeichenfolgen werden sonst alphanumerisch verglichen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Listbox mit vbTab Zahlen sorten 
Autor: Hank-15
Datum: 04.05.24 09:48

das hab ich bei euch gefunden nur... 😕

Public Function lbgt(Value As Variant, Optional Default As Integer) As Integer
 On Local Error Resume Next
  lbgt = CInt(Value)
  If Err.Number Then
    Err.Clear
    lbgt = Default
  End If
End Function
Ich hab damit versucht, ja nur versucht die Variable lbgt umzuwandeln
aber hier gibts schon gemecker


Private Sub LblBGTemp_Change()
 lbgt = Trim(LblBGTemp.Caption)
End Sub
Fehler beim Kompilieren
Funktionaaufruf auf der linken Seite der Zuweisung muss den
Typ Variant oder Object zurückgeben


ehrlich gesagt ist das Neuland ich hab noch nie Variable umgewandelt. Bisher brauchte ich sowas noch nicht. Nun steh ich da wie der Ochs vorm Tor 😳
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Listbox mit vbTab Zahlen sorten 
Autor: Manfred X
Datum: 04.05.24 13:32

Hallo!

Du schreibst eine eigene Konvertierungsroutine "lbgt" mit Parametern.
(Ich würde die Nutzung der IsNumeric-Methode empfehlen, um den Parameter zu testen.)
Diese Funktion muss natürlich entsprechend gerufen werden.
Vielleicht so:
Dim i as integer
i = lbgt(trim(lblBgtemp.caption))
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Listbox mit vbTab Zahlen sorten 
Autor: Hank-15
Datum: 04.05.24 14:09

Ja Danke nur wie schriftlich gesagt ich hab sowas noch nie gemacht weil ichs wohl bisher nicht gebraucht hab 😟
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel