ComboBox-Text überschreiben?

  • VB6

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Pascal.

    ComboBox-Text überschreiben?

    Hallo liebe Experten!

    Bitte um Rat. Habe bisjetzt nichts zum Thema gefunden (nur eine Lösung zu einem umgekehrten Problem :) ).
    Ich habe eine ComboBox, mit der ein bestimmter Wert für Lamellenabstand ausgewählt wird. Nun möchte ich dem Anwender die Möglichkeit geben den Wert der Combobox zu überschreiben, also wenn man nur zwischen 2,5 und 3,0mm wählen kann, dass man auch 2,8mm in der Combobox eingeben kann und damit weiterrechnen. Style ist auf 0-Dropdown-Kombinationsfeld eingestellt.

    Habe es mit einem Textfeld versucht, TxtLA.Text=CmbLA.Text, klappt nicht, es werden nur per .AddItem hinzugefügte Einträge übernommen.

    Danke für eure hilfe im Voraus!

    Viele Grüße
    Wie ist Deine Frage zu verstehen? Mu möchtest also, dass der zusätzlich eingetragene Wert mit in die DropDown Liste aufgenommen wird? Dazu im keypress auf chr$(13) prüfen. Wenn dieser kommt, den aktuellen Wert mit allen vorhandenen vergleichen und bei nicht vorhanden sein Eintragen.

    Visual Basic-Quellcode

    1. Option Explicit
    2. Private Sub Combo1_KeyPress(KeyAscii As Integer)
    3. Dim i As Integer
    4. Dim bolDa As Boolean
    5. Dim strWert As String
    6. bolDa = False
    7. strWert = Combo1.Text
    8. If KeyAscii = 13 Then
    9. For i = 0 To Combo1.ListCount - 1
    10. If Combo1.List(i) = strWert Then
    11. bolDa = True
    12. Exit For
    13. End If
    14. Next i
    15. If Not bolDa Then
    16. Combo1.AddItem strWert
    17. cboSort
    18. End If
    19. End If
    20. If KeyAscii = Asc(",") Then
    21. KeyAscii = Asc(".")
    22. End If
    23. If KeyAscii = 32 Then
    24. KeyAscii = 0
    25. End If
    26. End Sub
    27. Private Sub Form_Load()
    28. Dim i As Integer
    29. Combo1.Clear
    30. For i = 1 To 50
    31. Combo1.AddItem Trim(Str(i))
    32. Next i
    33. Combo1.AddItem "50.5"
    34. For i = 51 To 100
    35. Combo1.AddItem Trim(Str(i))
    36. Next i
    37. Combo1.ListIndex = 0
    38. End Sub
    39. Private Sub cboSort()
    40. Dim i As Integer
    41. Dim intPos As Integer
    42. Dim iMax As Integer
    43. Dim sngWert() As Single
    44. Dim sngMerk As Single
    45. If Combo1.ListCount > 1 Then
    46. ReDim sngWert(Combo1.ListCount - 1)
    47. For i = 0 To Combo1.ListCount - 1
    48. sngWert(i) = Val(Combo1.List(i))
    49. Next i
    50. intPos = UBound(sngWert)
    51. Do While CBool(intPos > 0)
    52. iMax = intPos - 1
    53. intPos = 0
    54. For i = 0 To iMax
    55. sngMerk = sngWert(i)
    56. If sngWert(i + 1) < sngMerk Then
    57. sngWert(i) = sngWert(i + 1)
    58. sngWert(i + 1) = sngMerk
    59. intPos = i
    60. End If
    61. Next i
    62. Loop
    63. Combo1.Clear
    64. For i = 0 To UBound(sngWert)
    65. Combo1.AddItem Trim(Str(sngWert(i)))
    66. Next i
    67. Combo1.ListIndex = 0
    68. End If
    69. End Sub
    Gruß
    Peterfido

    Keine Unterstützung per PN!

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

    Nein, dass möchte ich gar nicht.
    Angenommen, ich habe in dem Dropdown-Menü Auswahl zwischen 1mm, 2mm, 3mm, 4mm und 6mm. Diese Werte werden als 1, 2, 3, 4 und 6 im Programm weiter verwendet. Wenn der Anwender aber lieber mit 3,4mm rechnen möchte, soll das auch gehen, indem er diesen Wert in das Textfeld der Combobox eintippt. Das Dropdown-Menü soll unverändert bleiben. Das Problem ist, dass dieser eingetippte Wert anscheinend aus der Combobox nicht ausgelesen werden kann.
    Hallo, Lia.

    Erstmal Willkommen im Forum!

    So, nun zu deinem Problem. Im Prinzip kann ich mich Marcus Gräfe nur anschließen - genauso, wie du es beschrieben hast, müsste es eigentlich gehen. Unabhängig davon, ob in der Combo-Box jetzt Werte aufgelistet sind oder nicht, müsste die Weiterverarbeitung des Inhaltes der Text-Eigenschaft der CB eigentlich reibungslos funktionieren. Wenn sie das nicht tut, stimmt irgendetwas bei dir nicht.

    Damit wir dir dabei helfen können herauszufinden, was da nicht klappt würde ich dir empfehlen, erstmal eine genaue Fehlerbeschreibung hier zu posten. Was genau passiert, wenn der Benutzer eine eigene Zahl eingibt? Wird diese nicht angenommen, kommt eine Fehlermeldung, passiert einfach gar nichts? Hast du schonmal versucht, mit Haltepunkten herauszufinden, wo das Problem liegt?

    Zur Not könntest du das Projekt als Ganzes vielleicht hochladen damit man direkt einen Blick drauf werfen könnte.

    mfG

    Malcolm

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Malcolm“ ()

    Hallo!!

    Vielen Dank für Eure Antworten!
    Ich muss zugeben, Marcus Gräfe und Malcolm haben Recht, das funktioniert, ich beschreibe hier kurz was los war:

    *1* also ich habe es so versucht, wie zippozappo beschrieben hat, mit einem Textfeld neben der Combobox, das deren Wert mit

    TxtLA.Text=CmbLA.Text in Sub CmbLA_Click()

    übernehmen sollte. Das hat geklappt, allerdings nur mit den in der Box enthaltenen Werten, die vom Benutzer eingetragenen Werte wurden in das Textfeld nicht übernommen

    *2* dann habe ich den Wert CmbLA.Text in einem Fextfeld auf einem anderen Formular anzeigen lassen und das funktioniert 100%ig so wie ich es will

    *3* habe auch mit CmbLA_Change() versucht, allerdings hat mich das Programm nur ein einziges Zeichen eingeben lassen

    Also im Prinzip fnktioniert alles, nur würde mich interessieren, warum *1* nicht geht.

    Danke nochmals Euch allen!

    Gruß
    Hallo, Lia.

    Eigentlich müsste das auch auf dem selben Formular funktionieren, auf dem die ComboList ist, eigentlich brauchst du kein neues Formular, damit es funktioniert. Ich vermute, dass irgendwas bei dir falsch eingestellt ist. Ohne den Quellcode von dir kann man dir dabei leider nicht weiterhelfen, schließlich können wir sonst nur raten, wo das Problem liegt. Also bitte veröffentliche den betreffenden Quellcode oder das ganze Projekt.

    mfG
    Jo, das denke ich auch. Wenn Du das Change-Ereignis nimmst, reagiert Dein Programm natürlich nach jeder Eingabe (es ändert sich ja auch was).

    Bei Dir bietet sich das KeyUp-Ereignis an, denn dann kannst Du prüfen ob es sich um die Eingabetaste handelt. Ist das der Fall, kannst Du den Wert aus der ComboBox auslesen und im weiteren Programmverlauf verwenden.