Ich versuche, eine benutzerdefinierte Nachrichtenbox mit meinen Steuerelementen zu erstellen.
%Vor% Eigentlich muss ich einige Steuerelemente (eine Gridview) in diesem Formular platzieren und ich muss mein eigenes Theme für dieses Fenster anwenden, also möchte ich MessageBox
nicht verwenden. Ich möchte das von meinen anderen Formen wie
Ich möchte kein Objekt für dieses Formular erstellen.
Ich weiß, dass ich von Form
class nicht erben kann, weil es nicht statisch ist. Aber ich frage mich, wie MessageBox
implementiert ist, weil es statisch ist. Es wird wie MessageBox.show("Some message!");
Jetzt bekomme ich einen Fehler, weil Vererbung nicht erlaubt ist:
Die statische Klasse 'MyFormName' kann nicht vom Typ 'System.Windows.Forms.Form' abgeleitet werden. Statische Klassen müssen von Objekt
abgeleitet werden
Wie MessageBox
ist dann implementiert?
Ihre Formularklasse muss nicht static
sein. Tatsächlich kann eine statische Klasse überhaupt nicht erben .
Stattdessen erstellen eine internal
form-Klasse, die von Form
abgeleitet ist, und stellen eine public static
-Helfermethode bereit, um sie anzuzeigen .
Diese statische Methode kann in einer anderen Klasse definiert sein , wenn Sie nicht möchten, dass die Aufrufer das zugrundeliegende Formular überhaupt "kennen".
%Vor% Randnotiz: wie Jalal weist darauf hin , du musst keine Klasse static
erstellen, um static
Methoden darin zu haben. Aber ich würde immer noch die "Helfer" -Klasse vom eigentlichen Formular trennen, damit die Anrufer das Formular nicht mit einem Konstruktor erstellen können (außer sie sind natürlich in der selben Assembly).
Sie brauchen die Klasse nicht statisch. Mach einfach etwas wie:
%Vor% Sie müssen die Klasse static
nicht erstellen, um eine ihrer Methoden statisch aufzurufen - es ist ausreichend, die Methode als static
zu deklarieren.
Wir verwenden messageBox.ShowDialog()
, damit das Formular als modales Fenster angezeigt wird. Sie können das Meldungsfeld mit DetailedMessageBox.ShowMessage("Content", "Description");
anzeigen.
Übrigens sollten Sie Ihre Benennung überdenken und bei einem konsistenten Benennungsmuster bleiben. Msg
und show
sind schwache Namen, die nicht mit der Benennung übereinstimmen Richtlinien - Sie möchten diese definitiv überprüfen!
In einem WPF-Projekt können Sie ein neues Fenster hinzufügen und es MessageBoxCustom nennen, dann innerhalb von C # the Void, wo Sie InitialiseComponent () finden können; Sie fügen 2 Eigenschaften hinzu und binden diese Eigenschaften an die textBlocks, die Sie in Ihrer XAML-Ansicht erstellt haben sollten Beispiel:
%Vor%Tags und Links c# winforms forms messagebox