Eigene MessageBox
-
Für mein aktuelles Projekt benötige ich eine eigene MessageBox.
Dies habe ich wie folgt versucht umzusetzen.Klasse meiner MessageBox
public partial class MyMessageBox : Form { static MyMessageBox newMessageBox; static string Button_id; public static string ShowBox(string txtMessage) { newMessageBox = new MyMessageBox(); newMessageBox.lbMessage.Text = txtMessage; newMessageBox.ShowDialog(); return Button_id; } public static string ShowBox(string txtMessage, string txtTitle) { newMessageBox = new MyMessageBox(); newMessageBox.lbMessage.Text = txtMessage; newMessageBox.Text = txtTitle; newMessageBox.ShowDialog(); return Button_id; } public static string ShowBox(string txtMessage, string txtTitle, string txtBtn1, string txtBtn2, string txtBtn3) { newMessageBox = new MyMessageBox(); newMessageBox.lbMessage.Text = txtMessage; newMessageBox.Text = txtTitle; newMessageBox.button1.Text = txtBtn1; newMessageBox.button2.Text = txtBtn2; newMessageBox.button3.Text = txtBtn3; newMessageBox.ShowDialog(); return Button_id; } private void button1_Click(object sender, EventArgs e) { Button_id = "1"; newMessageBox.Dispose(); } private void button2_Click(object sender, EventArgs e) { Button_id = "2"; newMessageBox.Dispose(); } private void button3_Click(object sender, EventArgs e) { Button_id = "3"; newMessageBox.Dispose(); } }
Und dazu der Aufruf
string btnClicked = MyControls.MyMessageBox.ShowBox("test");
Leider erhalte ich eine NullReferenceException.
In der ZeilenewMessageBox.lbMessage.Text = txtMessage;
Weshalb?? Bzw wie kann ich das Problem lösen??
-
Die Mischung von statischen und nicht-statischen Methoden ist bei dieser Klasse nicht zu empfehlen.
Überlege dir, ob es gleichzeitig mehrere MessageBoxen geben kann (dann darfst du aber keine "static MyMessageBox"-Variable benutzen, da diese ja dann immer wieder überschrieben werden würde!). Ansonsten die ganze Klasse 'static' setzen.Und das 'Dispose' bei dem Button-Click ist auch keine gute Idee...
Die NullReferenceException findest du wohl mit dem Debugger raus.