Wie erstelle ich eine benutzerdefinierte MessageBox?

8

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

nennen %Vor%

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!");

aufgerufen

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?

    
Sen Jacob 03.08.2011, 20:22
quelle

5 Antworten

16

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).

    
Dan Abramov 03.08.2011, 20:31
quelle
4

Sie brauchen die Klasse nicht statisch. Mach einfach etwas wie:

%Vor%     
Lior Ohana 03.08.2011 20:26
quelle
4

Ich habe gerade eine einzige Dateiersetzung für MessageBox geschrieben, die ein gutes Beispiel dafür ist, wie man die statische Schnittstelle von MessageBox "imitiert". Sie können es hier herunterladen und wie eine normale MessageBox verwenden:

Ссылка

Grüße, Jörg

    
jreichert 26.06.2013 09:58
quelle
2

Sie müssen die Klasse static nicht erstellen, um eine ihrer Methoden statisch aufzurufen - es ist ausreichend, die Methode als static zu deklarieren.

%Vor%

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!

    
Marius Schulz 03.08.2011 20:27
quelle
0

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%     
TGB 05.02.2015 09:18
quelle

Tags und Links