Zum Inhalt springen

[VB.NET] Problem mit Item.Remove in ComboBox


Empfohlene Beiträge

Geschrieben

Hallo,

in einer Combobox werden zur Laufzeit drei Items hinzugefügt

- <Keine Auswahl>

- Herr

- Frau

<Keine Auswahl> ist nach dem Laden das SelectedValue. Wählt man in der Combobox Herr oder Frau aus, wird <Keine Auswahl> gelöscht. Das funktioniert wurderbar solange man nur mit der Maus die Combobox bedient. Mit der Tastatursteuerung bekomme ich allerdings Probleme. Nach dem Aufklappen der Combobox navigiere ich mit der Ende-Taste auf den letzten Eintrag (Frau), woraufhin <Keine Auswahl> korrekt entfernt wird. Hier ist allerdings schon auffällig, das die Liste zwar den gelöschten Eintrag nicht mehr anzeigt, sie sich allerdings auch nicht verkleinert. Sprich, die Liste hat immer noch die Größe von drei Items, zeigt aber nur noch zwei an. Verlasse ich jetzt die Combobox z.B. mit ESC oder klicke mit der Maus woanders hin, kriege ich einen Fehler:

System.ArgumentOutOfRangeException: InvalidArgument=Value mit dem Wert 2 ist für index ungültig.

Parametername: index

bei System.Windows.Forms.ComboBox.ObjectCollection.get_Item(Int32 index)

bei System.Windows.Forms.ComboBox.get_SelectedItem()

Zuerst dachte ich, dass es an unserem UserControl der Combobox liegt, aber ich kann dieses Verhalten auch mit der Standard-Combobox nachstellen.

Ich weiß nicht mehr weiter. Wie kriege ich hier eine saubere Tastatursteuerung hin?

Wir benutzen VB.NET 2.0.

Geschrieben

Hier der Code aus meinem Spielprojekt mit der Standard-Combobox:

Public Class Form1
Protected Overrides Sub OnShown(ByVal e As System.EventArgs)
MyBase.OnShown(e)

_formgeladen = False
ComboBox1.Items.Add("Herr")
ComboBox1.Items.Add("Frau")
ComboBox1.Items.Insert(0, "<Keine Auswahl>")
ComboBox1.SelectedItem = "<Keine Auswahl>"

_formgeladen = True
End Sub

Private Sub ComboBox1_SelectedValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedValueChanged
If _formgeladen Then
If ComboBox1.SelectedValue <> "<Keine Auswahl>" Then
ComboBox1.Items.Remove("<Keine Auswahl>")
End If
End If
End Sub

Private _formgeladen As Boolean
End Class[/PHP]

Geschrieben
Hab das mal mit Visual C# 2010 Express nachgebaut da das klappt bei mir ohne Probleme. Auch über die Tastatur wie dus oben beschrieben hast

Stell die Eigenschaft DropDownStyle mal auf DropDownList, dann bekommst du den Fehler auch.

Geschrieben

Hatte die Solution schon verworfen aber sind ja zum Glück nur ein paar Zeilen ;)


public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
comboBox1.Items.Add("Herr");
comboBox1.Items.Add("Frau");
comboBox1.Items.Insert(0, "<Keine Auswahl>");
comboBox1.SelectedItem = "<Keine Auswahl>";

}

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if ((String)comboBox1.SelectedValue != "<Keine Auswahl>")
comboBox1.Items.Remove("<Keine Auswahl>");
}
}
[/PHP]

Geschrieben

Hm, also ich hab von C# echt keine Ahnung und hab deinen Code einfach mal ganz frech kopiert. Jetzt wird die Combobox gar nicht mit Daten befüllt. Helf mir doch mal bitte auf die Sprünge... :floet:

Geschrieben

Das liegt in dem Fall aber nicht an C#...

Guybrush handelt es im FormLoad Event ab, du ueberschreibst den OnShow-Event,

da musst du schon aufpassen.

So wie Guybrush es schreibt, geht es definitiv.

Geschrieben

Wow, da ist ja VB wesentlich komfortabler ;)

Also wie gesagt, ich kenne mich mit C# nicht aus. Der Code läuft jetzt, aber ich bekomme trotzdem den gleichen Fehler, der sich aber anders äußert. Und zwar hält der Debugger in der Klasse Program (Program.cs) an in der Zeile

Application.Run(new Form1());

mit der besagten Fehlermeldung. Danach startet das Programm scheinbar von neuem, da sich wieder die Form mit allen Combobox-Einträgen öffnet. Also auch dem entfernten <Keine Auswahl>.

:confused:

Geschrieben

Du musst natuerlich dem EventHandler den Event zuweisen, den er abarbeiten soll:

Private Sub ComboBox1_SelectedValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedValueChanged

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...