[C#] ComboBox zur Laufzeit fuellen

keiji

Lt. Junior Grade
Registriert
Apr. 2006
Beiträge
498
Hi,

ich habe eine ComboBox in meinem Programm, die eine Reihe von Jahreszahlen
enthaelt.
In VS2005 kann man ja im Eigenschaftenfenster der ComboBox die Werte angeben,
die in der ComboBox aufgefuehrt werden sollen.
Da ich keine Lust hatte hundert Werte dort einzutragen, dachte ich mir, dass ich das
ueber eine Schleife zur Laufzeit mache.
Hat auch wunderbar geklappt.

Das Problem:
Die Jahreszahl wird abgespeichert. Das funktioniert auch.
Wenn ich die Jahreszahl allerdings wieder ueber die ComboBox anzeigen will,
wird die Zahl nicht angewaehlt, sondern die Box bleibt leer.
Wenn ich auf die DropDownList klicke, sind aber alle Jahreszahlen da.

Code:
myCBox.SelectedItem = einWert;
sollte ja eigentlich gehen. Allerdings ist SelectedItem immer null.

Ich hab mir dann mal den Index angeguckt.
Code:
myCBox.Items.IndexOf(einWert);
liefert null.

Code:
myCBox.Items.Contains(einWert);
liefert auch null, obwohl der Wert in ComboBox aufgefuehrt ist.

Kann es sein, dass die Liste beim nachtraeglichen Fuellen keinen neuen Index erhaelt?

Bin fuer jede Anregung dankbar.
 
AW: C# ComboBox zur Laufzeit fuellen

Vielleicht musst du die Darstellungsweise der ComboBox ändern, erlaubt deine die Eingabe eines beliebigen Textes?

Stell mal DrawMode auf DropDownList.
 
AW: C# ComboBox zur Laufzeit fuellen

Willst du evtl. noch etwas mehr Code zeigen ? Möglicherweise kann man es dann besser erkennen :)
 
AW: C# ComboBox zur Laufzeit fuellen

Hi,

also ich entwickel auch viel mit C# zurzeit hab ich mir nen Explorer geschrieben wo ich mir auch Buttons zur Laufzeit generiere. Ich habe meinen Buttons Texte zugewiesen um Dateinamen like windoof explorer zu simulieren :) das sollte bei dir auch klappen.

Du musst versuchen deine ComboBox was auch immer über die Controls anzusteuern!

Am besten wäre du schreibst dir nen eigenen Eventhandler!

z.B.

Code:
  buttonname.Name = name;        
  buttonname.Text = name;
  buttonname.Click += new EventHandler(meine_buttons_click);
In diesem Teil habe ich einen Button deklariert also ein Cotrol Element und habe ihm Werte meiner Dateien zugeordnet, das kannst du auch mit deinen Werten machen is ja im Prinzip das selbe!



Dann schreibste dir ne Methode um den Eventhandler aufzurufen!

Code:
   private void meine_buttons_click(object sender, EventArgs e)
        {

            Control ctrl = sender as Control;           
            string text = ctrl.Text;
}

Du greifst über den "SENDER" des Eventhandlers auf die Control eigenschaften zu!!
Hier kannst du die Eigenschaften des jeweiligen Buttons ändern wie du willst!
Wenn du noch fragen hast dann einfach ne PM!´Ich hoffe ich konnte dir helfen!

cya
 
Zuletzt bearbeitet:
AW: C# ComboBox zur Laufzeit fuellen

@deathhour: Was hat das konkret mit dem Problem zu tun?
Desweiteren gibt's keinen Grund warum man hier unbedingt PMs schreiben müsste, sonst könnte man sich die Antwort-Funktion gleich sparen und das komplette Forum auf PMs basieren lassen...
 
Sry wegen PM,
also was ich damit bezwecke er hat das Problem das er beim start keine Werte in seiner Combobox hat, ich würde es so machen ich gebe zu das das evt. ein wenig viel arbeit ist es gibt sicher auch einen leichteren weg!

Wie denkt ihr darüber es wäre sicher auch möglich eine Funktion zu schreiben die einfach die ComboBox Items fühlt beim Programm start.

Kann sein das ich die Frage falsch verstanden habe, ich sollte mir angewöhnen auch zwischen den Zeilen zu lesen,entschuldigung,ich wollt nur helfen!


P.S. Wenn du die Eigenschaften der Combobox in den Controls verankerst musst du die funktion nur einmal aufrufen das wäre am start des Programmes!
Bitte korrigiere mich wenn ich falsch liege!
 
Zuletzt bearbeitet:
Ich bin mir zu 99 % sicher dass es daran liegt, dass er die "falsche" Darstellungform der ComboBox eingestellt hat. Normalerwiese kann man in eine solche ComboBox ja auch beliebigen Text eingeben, insofern kann es durchaus sein, dass die genannten Methoden-Aufrufe in dieser Darstellungsweise einfach keinen richtigen Sinn ergeben.

Ich installier gleich mal Visual Studio, um das zu testen.


Edit: Hmm... ok bei mir bekomm ich selectedItem schon korrekt so wie's aussieht... (sofern es eben in der Auswahlliste enthalten ist)

Edit2: Also bei mir funktioniert es problemlos, mehr vom Quellcode würde kaum schaden...
 
Zuletzt bearbeitet:
Hi,

danke erstmal fuer die Antworten.
Ich poste mal mehr vom Code:)


Code:
this.enYearCBox.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;
this.enYearCBox.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;
this.enYearCBox.BackColor = System.Drawing.Color.White;
this.enYearCBox.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.enYearCBox.FormattingEnabled = true;
this.enYearCBox.Items.AddRange(new object[] {
"1950",
"1951"});
this.enYearCBox.Location = new System.Drawing.Point(126, 284);
this.enYearCBox.Name = "enYearCBox";
this.enYearCBox.Size = new System.Drawing.Size(77, 21);
this.enYearCBox.TabIndex = 10;
this.enYearCBox.Text = "Year";

Das ist der Code den VS2005 automatisch erzeugt. Wenn ich nichts an der Box aendere,
habe ich das Problem auch nicht. Also im Falle von 1950/1951 werden die korrekten Werte
angezeigt.

So...
Wenn ich im Konstruktor der Form das hier mache:

Code:
int year = 1950;
int count = 0;

object[] years = new object[100];
while (count < 100)
{
      years[count++] = year++;
}

this.enYearCBox.Items.Clear();
this.enYearCBox.Items.AddRange(years);

werden auch die korrekten Werte angezeigt. Also 1950 - 2049.
Alles kein Problem.
Im Verlauf des Programms wird dann ein Wert in einer Klasse abgespeichert.

Code:
emp.Date = this.enYearCBox.SelectedItem;

Funktioniert auch.
Man kann sich diesen Wert in einer Form wieder anzeigen lassen und ggf. editieren.
Dazu will ich wieder die ComboBox benutzen.

Code:
this.enYearCBox.SelectedItem = emp.EntryDate;

Hier ist dann der Wert leider immer null:mad:
Wie gesagt, wenn ich die Schleife aus dem Konstruktor rausnehme, also die ComboBox nicht mit neuen Werten fuelle, funktioniert das ganze.
Leider muesste ich dann von Hand die ganzen Jahreszahlen eingeben, aber man wird ja faul:D
Aber wenn's anders nicht geht, muss ich wohl in den sauren Apfel beissen...

Ach ja, Style ist DropDown, aber mit DropDownList hat es auch nicht funktioniert.
Nochwas bei anderen ComboBoxen, deren Werte ich nicht spaeter setze, funktioniert das ganze.

Danke fuers Lesen:daumen:
 
Warum machst du das so kompliziert und alles über Objects?

PHP:
 for (int i = 1900; i <= 2000; i++)
            {
                this.years.Items.Add(i.ToString());
            }
            this.years.SelectedIndex = 50;
Komplette Programm ist im Anhang.

Grüße

krizzel
 

Anhänge

keiji schrieb:
Hi,

danke erstmal fuer die Antworten.
Ich poste mal mehr vom Code:) <snip>

this.enYearCBox.Items.Clear();
this.enYearCBox.Items.AddRange(years);[/code]werden auch die korrekten Werte angezeigt. Also 1950 - 2049.
Alles kein Problem.
Im Verlauf des Programms wird dann ein Wert in einer Klasse abgespeichert.

Code:
emp.Date = this.enYearCBox.SelectedItem;
Funktioniert auch.
Man kann sich diesen Wert in einer Form wieder anzeigen lassen und ggf. editieren.
Dazu will ich wieder die ComboBox benutzen.

Code:
this.enYearCBox.SelectedItem = emp.EntryDate;
Hier ist dann der Wert leider immer null:mad:
Wie gesagt, wenn ich die Schleife aus dem Konstruktor rausnehme, also die ComboBox nicht mit neuen Werten fuelle, funktioniert das ganze.
Leider muesste ich dann von Hand die ganzen Jahreszahlen eingeben, aber man wird ja faul:D

Danke fuers Lesen:daumen:


So, wie ich das jetzt lese, machst du ein wildes Herumgewurstel mit Objekten verschiedenen Typs. Ein Eintrag in einer ListBox ist nunmal ein ListBoxItem und kein Datum oder eine Zahl. Du musst dir Gedanken machen, wie du vom ListBoxItem zu einem Datum und zurück kommst.
 
krizzelfix schrieb:
Warum machst du das so kompliziert und alles über Objects?l
hab ich mich auch grade gefragt:D
Die Welt von C# kann so einfach sein:p
 
Könntest du mal den Code der Klasse posten in der du die Daten abspeicherst ?
 

Ähnliche Themen

Zurück
Oben