Hallo zusammen!
Ich habe ein komisches Problem...
Ich habe auf einer Form ein selbstgeschriebenes Steuerelement platziert. Dieses besitzt ein Label, welches als Caption/Text dient.
Im Steuerelement selbst habe ich folgendes stehen:
public string ItemCaption
{
get { return this.lblCaption.Text; }
set
{
this.lblCaption.Text = value;
this.lblCaption.Refresh(); }
}
In der Form weise ich die ItemCaption nun so zu:
this.mainItem.ItemCaption = "Test caption";
Wenn ich mich nicht irre, sollte das doch eigentlich funktionieren, oder?
Leider ändert sich der Text des Labels nicht...
Habe sogar mal probiert, vor dem
this.lblCaption.Text = value;
ein
MessageBox.Show(value);
und nach dem
this.lblCaption.Refresh();
ein
MessageBox.Show(this.lblCaption.Text);
einzufügen. In der MessageBox wurde dann auch der richtige neue Wert angezeigt - nur nicht im Label...
Was mach ich denn so falsch, dass das ums Verrecken nicht funktioniert? Langsam zweifle ich an meiner Intelligenz...
Würde mich sehr über Hilfe freuen!
Greets - SK
P.S: Selbst mit einer Änderung des Konstruktors (jetzt mit string-Parameter, der dann auch - nach InitializeComponent(); - dem Label als Text zugewiesen wird) klappt es einfach nicht...
Sagte ich schon Danke? Nein? ...kommt noch...
Hallo Schattenkanzler,
das einzige, was mir momentan einfällt, ist, dass das GUI durch eine lange Aktion blockiert ist. Dann müsste das Label aber den Text durch die MessageBox danach, korreket angezeigen.
Schreib mal bitte, von wo aus du ItemCaption aufrufst.
herbivore
Ist dein Steuereelent von Windows.Forms.Label abgeleitet?
Morgen!
Also...
@herbivore: Nein, es gibt keinerlei längere Aktion, das Programm befindet sich zum Änderungszeitpunkt quasi im "Leerlauf".
Ich erstelle in meiner MainForm in der Load-Methode per Code dieses Steuerelement:
private myControl mainItem;
...
void MainFormLoad(object sender, System.EventArgs e)
{
this.mainItem = new myControl("Irgendeine Caption");
this.mainItem.Dock = DockStyle.Fill;
this.Controls.Add(this.mainItem);
}
...
void MenuItem4Click(object sender, System.EventArgs e)
{
this.mainItem.ItemCaption = "Test caption";
}
Dabei wundert mich, dass selbst der dem Konstruktor übergebene Parameter nicht funktioniert:
public myControl(string c)
{
InitializeComponent();
this.lblCaption.Text = c;
//this._caption ist ein private string
this._caption = c;
this.Show();
}
Das Label behält in jedem Fall den Wert, den es in InitializeComponent() bekommt...
Was mich noch mehr wundert: Ich habe dem Label dann ein Click-Event zukommen lassen:
void LblCaptionClick(object sender, System.EventArgs e)
{
this.ItemCaption = "Geklickt";
}
Das funktioniert. Was aber nicht geht:
void LblCaptionClick(object sender, System.EventArgs e)
{
this.ItemCaption = this._caption;
}
Dabei hört bei mir dann jegliches Verständnis auf...
@qwert_a: Nein, das Control ist nicht abgeleitet, außer natürlich von UserControl...
Was ist denn hier das Problem?
Greets und Danke schonmal - SK
Sagte ich schon Danke? Nein? ...kommt noch...
Halt, stop! Sorry, dass ich hier nen Doppelpost mache, aber ich muss grad mal meine eigene Blödheit beweihräuchern.
Also, mir fiel auf, dass die private Variable nicht zugewiesen wurde. Das wunderte und ärgerte mich schon sehr. Dann hab ich mich ein wenig ans Aufräumen gemacht und in der MainForm alles gekillt, was ich hier schon beschrieben habe. Habe die Angewohnheit, immer und immer wieder zu kompilieren und auszuführen, damit ich auch die kleinsten Veränderungen gleich sehe. Und siehe da: Plötzlich war das doch noch immer was auf dem Schirm zu sehen.
Da hab ich die InitializeComponent() der MainForm untersucht und dort einen Aufruf eines UserControls gefunden - dem ersten Versuch, der scheiterte. Dummerweise hab ich den nie aus dem Projekt entfernt. Tja, irgendwie muss dann durch den Namenskonflikt immer mein erster Versuch aufgerufen worden sein...Blödheit eben!
Danke für eure Mühen! Wirklich!
Jetzt läuft alles so, wie es laufen soll freu.
Greets - SK
P.S: Da ich mit dem Control noch eine Weile beschäftigt sein werde, würde ich darum bitten, das Thema noch nicht zu schließen...gebt mir ne Woche, ja?
Sagte ich schon Danke? Nein? ...kommt noch...
Hallo Schattenkanzler,
stell mal bitte ein minimales Beispiel, das den Fehler aufweist, online.
herbivore
PS: Kommando zurück! 🙂