Ich erstelle eine Anwendung mit WinForms. Ich habe panel
in denen ich eine user control
zeigen. Innerhalb dieser user control
habe ich eine button
. Wenn ich auf die Schaltfläche klicke, möchte ich die panel
löschen und eine andere user control
anzeigen. Ich versuche, das zu tun, mit dem folgenden Code:Ändern des Bedienfelds aus dem Bedienfeld
private void btnCreateOffer_Click(object sender, EventArgs e)
{
var myControl = new WindowsFormsDemo.View.CreateOffer();
MockUpForm.panMain.Controls.Clear();
MockUpForm.panMain.Controls.Add(myControl);
}
Dies funktioniert aus den Tasten direkt in der parrent Form gebracht, aber wenn ich in den user control
verwende in, heißt es:
'MockUpForm.panMain' is inaccessible due to its protection level
I Angenommen, es hat etwas mit privaten/öffentlichen Klassen zu tun. Aber ich würde lieber die "richtige" Lösung haben, als alles nur öffentlich zu machen.
Irgendwelche Vorschläge, wie dies normalerweise geschieht?
Es ist ein grundlegend falscher Weg, dies zu tun. Erhebe stattdessen ein Ereignis, dein Hauptformular kann es abonnieren und um seine Steuerelemente wackeln. Die Verwendung von Controls.Clear() ist auch sehr, * sehr * falsch, Sie müssen die Dispose() -Methode für jedes Steuerelement, das Sie entfernen, aufrufen oder Sie werden einen permanenten Speicherverlust verursachen. –
Danke für Ihre Kommentare. Ich bin ziemlich neu in WinForms, also mache ich wahrscheinlich eine Menge Sachen * sehr * falsch :-). Ich werde in die Ereignismethode schauen ... – Noceo
@HansPassant: Er erwähnte nicht, ob er die entfernten Kontrollen wiederverwenden möchte. Aber wenn Ereignisse auch abonniert sind, ist die Beseitigung nicht genug, Speicherleck wird sowieso auftreten. – taffer