How to create a custom MessageBox?

后端 未结 4 1188
星月不相逢
星月不相逢 2020-11-27 06:09

I\'m trying to make a custom message box with my controls.

public static partial class Msg : Form
{
    public static void show(string content, string descri         


        
相关标签:
4条回答
  • 2020-11-27 06:45

    You don't need to make the class static in order to call one of its methods statically — it's sufficient to declare the particular method as static.

    public partial class DetailedMessageBox : Form
    {
        public DetailedMessageBox()
        {
            InitializeComponent();
        }
    
        public static void ShowMessage(string content, string description)
        {
            DetailedMessageBox messageBox = new DetailedMessageBox();
            messageBox.ShowDialog();
        }
    }
    

    We are using messageBox.ShowDialog() to have the form being displayed as a modal window. You can display the message box using DetailedMessageBox.ShowMessage("Content", "Description");.

    By the way, you should rethink your naming and stick to a consistent naming pattern. Msg and show are weak names that do no match the Naming Guidelines — you would definitely want to check those out!

    0 讨论(0)
  • 2020-11-27 07:02

    In a WPF project you can add a new window and call it MessageBoxCustom then inside C# the Void where you can find InitialiseComponent(); you add 2 properties and bind those properties to the textBlocks you should have created inside your XAML view Example:

    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();
    }
    
    0 讨论(0)
  • 2020-11-27 07:08

    You don't need the class to be static. Just do something like:

    public partial class Msg : Form
    {
        public static void show(string content, string description)
        {
             Msg message = new Msg(...);
             message.show();
        }
    }
    
    0 讨论(0)
  • 2020-11-27 07:09

    Your form class needs not to be static. In fact, a static class cannot inherit at all.

    Instead, create an internal form class that derives from Form and provide a public static helper method to show it.

    This static method may be defined in a different class if you don't want the callers to even “know” about the underlying form.

    /// <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 ();
            }
        }
    }
    

    Side note: as Jalal points out, you don't have to make a class static in order to have static methods in it. But I would still separate the “helper” class from the actual form so the callers cannot create the form with a constructor (unless they're in the same assembly of course).

    0 讨论(0)
提交回复
热议问题