Combobox + Eventhändler Problem

kanada

Mitglied
In HTML kann man den Einträgen in einer Combobox ja ganz einfach einen x-beliebigen Value-Wert zuweisen. Unter C# geht das ja nicht ganz so einfach, aber ich habe mir trotzdem zu helfen gewusst.

Dies funktioniert im Grundprinzip auch, nur gibt es ein Problem wenn ich das ganze mit einen Eventhändler verbinde. Ich habe halt die eine Combobox zur Auswahl und eine Textbox wo man selbst einen Wert eingeben kann, diese beiden werden dann addiert zb.

Nun habe ich das so eingestellt, dass das Ergebnis jedesmal berechnet wird wenn das Enter oder Leave Event ausgelöst wird. Das funktioniert auch.

Als nächster Schritt war dann, dass das Ergebnis auch neu berechnet wird, wenn man zb. in der Combobox nur einen Wert ändert. Denn da würde ja logischerweise weder Enter noch Leave ausgelöst. Habe es dann mit Select und/oder Text-changed probiert. Bei der Textbox geht das auch einwandfrei, doch bei der Combobox geht das nicht. Da meckert der mit einmal folgendes: "Die Eingabezeichenfolge hat das falsche Format.", an der Zeile "double zahlx = Convert.ToDouble(cbZahl.Text);".

Wieso geht es bei Enter und Leave ohne Probleme und bei Select und Text-changed nicht? Die Eingabezeichenfolge ändert sich ja bei allen 4 Varianten nicht.

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

cntry.Add(new Countries("Max", "2"));
cntry.Add(new Countries("Muster", "3"));
cntry.Add(new Countries("Moritz", "1"));

cbName.DataSource = lst_cntry;
cbName.DisplayMember = "Name";

cbZahl.DataSource = lst_cntry;
cbZahl.DisplayMember = "Zahl";

cbName.SelectedItem = 0;
}

public List<Countries> cntry = new List<Countries>();

private void cbName_SelectedValueChanged(object sender, EventArgs e)
{
if (cbZahl.SelectedItem != cbName.SelectedItem)
{
cbZahl.SelectedItem = cbName.SelectedItem;
}
}

private void cbZahl_SelectedValueChanged(object sender, EventArgs e)
{
if (cbName.SelectedItem != cbZahl.SelectedItem)
cbName.SelectedItem = cbZahl.SelectedItem;
}

public class Countries
{
public string Name { get; set; }
public double Zahl { get; set; }

public Countries(string Name, double Zahl)
{
this.Name = Name;
this.Zahl = Zahl;
}
}

private void label1_Click(object sender, EventArgs e)
{
double multi = Convert.ToDouble(Multi.Text);
double zahlx = Convert.ToDouble(cbZahl.Text);

double resulttex = zahlx * multi;

label1.Text = "Ergebnis: " + resulttex.ToString() + " Nüsse";
}
}
 
Zuletzt bearbeitet:
Der Code den du gepostet hast funktioniert bei mir eingentlich. Die FormatException bekomme ich nur wenn ich in die ComboBox nichts eingebe.
Kann es sein das dies auch dein Problem ist? Das du sozusagen irgenwo den Text in der ComboBox verlierst?
 
*mhm* das kann natürlich sein, das deswegen sofort beim start abstürzt. Aber eigentlich müsste ja standardmäßig der erste Eintrag als Wert drinnen stehen.
 
Kann es sein das direkt beim Start das Event ausgelöst wird bevor die Box initialisiert ist?
Schreib mal eine Überprüfung in den Eventhandler ob der Text leer ist.
 
Bin gerade heim gekommen und habe es gleich mal probiert, der sagt mir nur das diese Funktion ohne Funktion ist :suspekt:

Oder muss ich da noch was ergänzen?
 
Schon wieder? Von welcher Funktion sprichst du?
Schreib ganz genau:

C#:
private void label1_Click(object sender, EventArgs e)
{
   if (cbZahl.Text != "")
   {
      double multi = Convert.ToDouble(Multi.Text);
      double zahlx = Convert.ToDouble(cbZahl.Text);

      double resulttex = zahlx * multi;

      label1.Text = "Ergebnis: " + resulttex.ToString() + " Nüsse";
   }
}
 
Zuletzt bearbeitet von einem Moderator:
gut, kannst du mal jeweils vor der Umwandlung den Wert von cbZahl.Text ausgeben und mal schauen ob dort eine gültige Zahl drinsteht?
 

Neue Beiträge

Zurück