ComboBox Einträge nicht anwählbar machen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 19 Antworten in diesem Thema. Der letzte Beitrag () ist von JLH.

    @JLH

    Nur so eine Idee:(ungetestet)

    VB.NET-Quellcode

    1. Dim indexToDisable As Integer
    2. For i As Integer = 0 To ComboBox1.Items.Count - 1
    3. If i = indexToDisable Then
    4. ComboBox1.Items(i).Enabled = False
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

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

    @ Joachim: Ja, das war mein erster Ansatz. Wegen eines Denkfehlers (den ich jetzt bemerkt habe) habe ich dies aber verworfen. So würde es tatsächlich gehen wenn ich von klein bis groß fülle.

    Zur Erklärung: Der Anwender gibt den Durchmesser einer Bohrung an. In der Combobox kann er dann einen Dorn wählen den er in diese Bohrung einführen möchte. Dorne die zu groß sind sollen ausgeblendet werden, das ist kein Problem. Dorne die viel zu klein sind aber auch. Wenn ich so fülle dann verutscht meine Abfrage. ZB wurde Eintrag3 gewählt weiß ich das ist Dorn#3. Wurde aber #1 und #2 nicht gelistet dann ist Eintrag1 Dorn#3 und Eintrag1 hat aber die Daten von Dorn#1 hinterlegt.... verständlich?
    @JLH

    Wenn ich so fülle dann verutscht meine Abfrage.

    Vielleicht dann die Abfrage der Befüllung anders aufbauen.
    Ist ja auch die Frage von wo wird die Combobox gefüllt? Evtl schon da selektieren?
    Evtl mit Enum oder List(Of) oder...
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

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

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    ComboBox1.item.add(30)
    ComboBox1.item.add(40)
    ComboBox1.item.add(50)

    Bohrkopf:
    30
    40
    50

    Quellcode

    1. Combobox2.Items.clear
    2. Select Case ComboBox1.SelectedIndex
    3. Case 0
    4. Combobox2.itams.add(30,100)
    5. Vombobox2.items.add(30,200)
    6. Case 1
    7. Combobox2.itams.add(40,220)
    8. Combobox2.items.add(40,230)
    9. case 2
    10. etc.
    11. end select



    Ich verstehe dein Problem nicht?

    Aber wenn du willst das deine Combobox nur das macht wann du es willst.
    Dann setze eine Variable z.b. "NoCombo"

    Quellcode

    1. Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
    2. If Not NoCombo Then
    3. NoCombo=true
    4. 'Ich mach jetzt!
    5. NoCombo=false
    6. End If
    7. End sub


    Laufzeitfehler können hierdurch vermieden werden. Bin mir aber nicht sicher ob das Gral ist.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Joachim-VB68“ ()

    Hm, weiß nicht was ein Dorn ist. Ist glaube ich ein Problem an dieser Stelle.

    Aber wie auch immer, der Dorn wie du ihn darstellst ist ein Double. Und soll der User den doch eingeben. Man kann stattdessen eine TextBox oder besser ein NumericUpDown hernehmen zum nächstbesten passenden Wert runden.
    Also gerade auch wenn zu kleine oder zu große Werte angegeben werden. Das hat ein NumericUpDown sogar so schon eingebaut.
    Angenommen kleinster sinnvoller Wert = 4.5
    Usereingaben von 1 oder 2.3 werden einfach zu 4.5 geschubst.

    Also obwohl es sicherlich funktioniert, wie du es haben möchtest, bin ich der Meinung, wie @Amelie sagt, es anders zu implementieren.
    Extremfälle z.B. wären der User hockt vor 20 ausgegrauten ComboBox Elementen. Außerdem ist die Erweiterung so ja auch nicht schön, wenn ein neuer Dorn dazukommt musst du ein Update machen?

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

    @Rod: nein, ich möchte die Einträge die nicht sinnvoll sind deaktivieren.
    @'FormFollowsFunction: Das sieht gut aus.

    Seh gerade, daß es da ein paar Verutschungen wegen nicht aktualisierten Browser gibt…
    Ich denke ich überlege mir wie Amelie sagt eine Lösung zur Befüllung. Und nein, es kommt kein weiterer Dorn hinzu. Die sind genormt und es gibt nur die.

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

    JLH schrieb:

    Und nein, es kommt kein weiterer Dorn hinzu. Die sind genormt und es gibt nur die
    Na ein Glück, dass Normen nie geändert werden...

    Ich glaube Rod hat keinen so schlechten Vorschlag gemacht. Du kannst statt die Items zu entfernen, sie durch einen Separator ersetzen. Du sagst ja: nur Entfernen pfuscht mit deiner Implementierung. Durch Ersetzen bleiben die Plätze erhalten.
    Aber wie gesagt, bestimmt nicht schlecht das nochmal einer gründlicheren Revision zu unterziehen.

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

    JLH schrieb:

    nein, ich möchte die Einträge die nicht sinnvoll sind deaktivieren.
    Dann mach doch meine Separatoren zu Deinen deaktivierten Einträgen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Vielleicht könnte man das mit einem Treeview abbilden?

    Je nach Eingabe in der Textbox zeig das Treeview nur die Dorne welche passen würden.
    Aber ich denke auch hier müsste man wissen wie die Daten der Dorne bereitgestellt werden??
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    Also als erstes sollte ein Datenmodel her, dann sowas wie ein Parent-Child-View. Das könnten 2 ComboBoxen sein, oder DataGridViews, oder ComboBox + eine ListBox oder ListView.
    Beim ersten Control die parent Daten, beim zweiten Control dann die untergeordneten Daten, je nach selektion vom ersten, kann man gut mit Bindings machen.
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D
    Du könntest dir eine Dorn-Klasse erstellen für jeden Dorn packst du dann eine Instanz der Dorn-Klasse in eine Liste. Sollte es doch mehr Dorne sein würde sich wie DTF schon sagte eine DataTable anbieten. Die Liste kannst du dann der ComboBox als DataSource zuweisen. Dann stehen dir Beide Wege offen also eine Filterung und das ausgrauen der ComboBox-Items. Hab dir mal ein Beispiel angehängt, Form1 ist die Filtervariante und Form2 die von FormFollowsFunction verlinkte variante.
    Dateien
    Danke für die vielen Ideen. Ich habe es jetzt gelöst indem ich bis zum größtmöglichem fülle und auf die aussortierung der kleinen verzichtet habe. So paßt mein Index und ich kann in der weiteren Rechnung auf meine bestehenden TAbellen ohne Änderungen zugreifen.

    @Rod: Ich hab erst jetzt kapiert was Du vorgeschlagen hast… Das Probier ich am Mittwoch.

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