如何创build一个自定义的MessageBox?
我正在尝试使用我的控件制作自定义消息框。
public static partial class Msg : Form { public static void show(string content, string description) { } }
其实我需要在这个窗体中放置一些控件(一个gridview),我必须为这个窗口应用我自己的主题,所以我不想使用MessageBox
。 我想从我的其他表格中调用这个
Msg.show(parameters);
我不希望为这个表单创build一个对象。
我知道我不能从Form
类inheritance,因为它不是静态的。 但我不知道如何实现MessageBox
,因为它是静态的。 它被称为MessageBox.show("Some message!");
现在我得到一个错误,因为不允许inheritance:
静态类“MyFormName”不能从types“System.Windows.Forms.Form”派生。 静态类必须从对象派生
MessageBox
如何实现呢?
你的表单类不需要是static
。 事实上, 一个静态类不能inheritance 。
相反, 创build一个从Form
派生的internal
表单类,并提供一个public static
辅助方法来显示它 。
如果您不希望调用者甚至“知道”底层窗体, 则可以在不同的类中定义此静态方法。
/// <summary> /// The form internally used by <see cref="CustomMessageBox"/> class. /// </summary> internal partial class CustomMessageForm : Form { /// <summary> /// This constructor is required for designer support. /// </summary> public CustomMessageForm () { InitializeComponent(); } public CustomMessageForm (string title, string description) { InitializeComponent(); this.titleLabel.Text = title; this.descriptionLabel.Text = description; } } /// <summary> /// Your custom message box helper. /// </summary> public static class CustomMessageBox { public static void Show (string title, string description) { // using construct ensures the resources are freed when form is closed using (var form = new CustomMessageForm (title, description)) { form.ShowDialog (); } } }
注意:正如Jalal所指出的那样 ,你不必为了使static
方法在static
类中而做一个static
类。 但是我仍然将“helper”类从实际的表单中分离出来,所以调用者不能用构造函数创build表单(除非它们在同一个程序集中)。
你不需要这个类是静态的。 只要做一些事情:
public partial class Msg : Form { public static void show(string content, string description) { Msg message = new Msg(...); message.show(); } }
我刚刚写了MessageBox的单个文件replace,这是一个很好的例子,如何“模仿”MessageBox的静态接口。 你可以在这里下载并使用它像一个标准的MessageBox:
http://www.codeproject.com/Articles/601900/FlexibleMessageBox-A-flexible-replacement-for-the
问候,Jörg
你不需要static
调用其中的一个静态方法 – 只要声明特定的方法是static
。
public partial class DetailedMessageBox : Form { public DetailedMessageBox() { InitializeComponent(); } public static void ShowMessage(string content, string description) { DetailedMessageBox messageBox = new DetailedMessageBox(); messageBox.ShowDialog(); } }
我们使用messageBox.ShowDialog()
将窗体显示为模式窗口。 您可以使用DetailedMessageBox.ShowMessage("Content", "Description");
显示消息框DetailedMessageBox.ShowMessage("Content", "Description");
。
顺便说一句,你应该重新考虑你的命名,并坚持一致的命名模式。 Msg
和show
是不符合命名指南的弱名称 – 你一定要检查这些!
在一个WPF项目中,你可以添加一个新的窗口,并将其称为MessageBoxCustom,然后在C#中的Void中findInitialiseComponent(); 您添加2个属性并将这些属性绑定到应该在XAML视图中创build的textBlocks示例:
public MessageBoxCustom(string Message, string Title) { InitialiseComponent();//this comes first to load Front End textblock1.Text = Title; textblock2.Text = Message; } Just position your TextBlocks where you want them to be displayed in XAML From your Main Window you can call that message box like this private void Button_Click() { MessageBoxCustom msg = new MessageBoxCustom("Your message here","Your title her"); msg.ShowDialog(); }