In diesem Snippet erkläre ich, wie man mit der message-Klasse einfach eigene MessageBoxen erstellt.
Vorerst musst Du eine Vorlage (Formular) für die MessageBox designen (MessageForm). Es sollten vorhanden sein:
- Wenn kein Standardfenster benutzt wird: Label für Titel (lbTitle)
- Label für Text (lbText)
- Label für Bild (lbImage)
- Schaltfläche (Button od. Label) mit Aufschrift "Ja" (btYes)
- Schaltfläche (Button od. Label) mit Aufschrift "Nein" (btNo)
MessageBox anzeigen:
CustomMessageBox.Show("Mitteilungstext", "Titel", MessageBoxButtons.OK, SystemIcons.Information, new MessageForm());
Folgende Zeile muss in die Load-Methode der Vorlage:
CustomMessageBox.GetMessage(lbText, lbTitle, lbImage, btYes, btNo);
Soll der Titel in der Head-Leiste des Fensters angezeigt werden, ersetzt man lbTitle einfach durch this. Dann wird der Formulartext angepasst. :)
Wie man vielleicht sieht werden jedoch nur Ja-Nein- und OK-Boxen unterstützt. Bei anderen MessageBoxButtons wird eine OK-Meldung angezeigt. ;D
Dies ist die neue Version der Message-Klasse.
Sie ist deutlich sauberer und schneller, kleiner, und einfacher zu benutzen. --> Nur 2 Methoden!!
using System;
using System.Windows.Forms;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace DariusArnold
{
public static class CustomMessageBox
{
private static string text, title;
private static MessageBoxButtons buttons;
private static System.Drawing.Image img;
private static DialogResult result;
private static Form form;
public static DialogResult Show (string mText, string mTitle, MessageBoxButtons mButtons, System.Drawing.Image mImg, Form mForm)
{
text = mText;
title = mTitle;
buttons = mButtons;
img = mImg;
form = mForm;
form.ShowDialog();
return result;
}
public static void GetMessage(Control mTextControl, Control mTitleControl, Control mImgControl, Control btYes, Control btNo)
{
mTextControl.Text = text;
mTitleControl.Text = title;
if (buttons != MessageBoxButtons.YesNo)
{
btYes.Visible = false;
btNo.Text = "OK";
}
btYes.Click += new EventHandler(Yes);
btNo.Click += new EventHandler(No);
mImgControl.BackgroundImageLayout = ImageLayout.Center;
mImgControl.BackgroundImage = img;
result = DialogResult.Abort;
}
private static void Yes(object sender, EventArgs e)
{
result = DialogResult.Yes;
form.Close();
}
private static void No(object sender, EventArgs e)
{
result = DialogResult.No;
form.Close();
}
}
}