Aktualisierung label in der main form von user control
In meiner aktuellen Anwendung habe ich eine main form: frmMain
mit einem statusstrip
und ein label: lblStatus
im inneren, dass.
Ich möchte zu aktualisieren, dass die Beschriftung von innen meine user-controls, die ich zu meinem Hauptformular, wenn ich auf den betreffenden button:
ucBeheer ucBeheer = new ucBeheer();
splitContainer1.Panel2.Controls.Add(ucBeheer);
Aus in meine usercontrol
wenn ich eine Handlung, ich möchte update lblStatus
. Ich habe versucht, indem Sie die folgende Eigenschaft zu meiner Haupt form:
public string updateStatus
{
get { return lblStatus.Text; }
set { lblStatus.Text = value; }
}
Und dann Zugriff auf die Methode, wie diese in meinen user-Kontrolle:
frmMain mainForm = new frmMain();
mainForm.updateStatus = "This is a test";
Aber das funktioniert nicht, ich weiß, dass dies ist, weil ich ein neues Objekt meiner frmMain
, aber ich weiß nicht, wie löst man das sonst?
Habe ich auch gefunden die folgenden Weg, mit einem Event Handler
aber ich kann nicht, weil meine Benutzer-Steuerelement ist nicht wirklich in meinem mainForm noch, bis ich es dort hinzufügen mit Klick auf den button, so habe ich nicht einen Hinweis darauf.
So, ich bin irgendwie die Ideen aus, ich hoffe jemand kann mir helfen.
Vielen Dank,
Thomas
Edit: So ich habe es geschafft die folgende Weise:
frmMain owningForm = (frmMain)this.Parent.Parent.Parent.Parent;
owningForm.updateStatus = "This is a test";
aber this.Parent.Parent.Parent.Parent...
nicht wirklich scheinen, wie eine gute Kodierung zu mir, gibt es einen anderen Weg, um die top-Elternteil?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnte man hinzufügen, eine Eigenschaft wie Sie diese zu Ihrem Benutzersteuerelement, mit diesem können Sie den Zugriff auf die frmMain, dass das usercontrol befindet.
UPDATE:
Wenn Sie nur wollen, die besten Eltern, die Sie verwenden könnte, so etwas wie dieses:
Oder sogar eine extension-Methode, die:
Ihrer Kontrolle und form zu kommunizieren, so muss man "wissen" über die anderen. Real, das bedeutet, dass ein Verweis auf eine, zu den anderen. So haben Sie 2 Möglichkeiten: entweder die Steuerung muss eine Referenz auf die form, oder die form braucht eine Referenz auf das control.
Die Art, wie ich tun würde, wäre dies für das Formular zum abonnieren eines Ereignisses herausgegeben von der Kontrolle. Dies ist das Formular aus und geben Sie einen Verweis, um nur eine seiner Methoden, um die Kontrolle.
Dann in Ihrer form, das Ereignis abonnieren:
StatusChangedEventArgs
und wie würde ich es machen, können get-und set-text von meinem label?RaiseStatusChanged
wenn Sie brauchen, um in Ihrer Kontrolle.usercontrol
imusercontrol
- und dann würde dies nicht funktionieren. (Ich bin mir nicht sicher, ob das hinzufügen einerusercontrol
imusercontrol
ist gut, coding, aber es ist der einzige Weg, fand ich in der Lage sein zu navigieren, richtig)Können Sie auf Ihre Anwendung das Hauptformular der Anwendung.OpenForms FormCollection von name:
frmMain owningForm = (frmMain)Anwendung.OpenForms["frmMain"];
owningForm.updateStatus = "Dies ist ein test";