Dear all,
My sincere appologies to you all for visiting the broken link. I have been away from CP for a while and from personal projects. I did not renew the website and as a result I lost ownership. Once again, I'd like to appologie for those who visited the direct link. I am truly sorry.
Version 1
Version 2
Update
This article explains how Version 1 was developed. I have since updated the sample project. Features in the new updated version include:
- MessageBox icons.
- Expandable form to accommodate longer text.
- Three animation styles (
SlideDown
, FadeIn
, and ZoomIn
).
- MessageBox beep sound.
- Returns a
DialogResult
object when button is clicked.
- New interface.
Introduction
The Windows message box is a sufficient means to display messages to the user. For many applications the message box will work fine, however there are times when the message box is limited. For example, suppose you want to display a lot of text and therefore want a message box that was sizable or even scrollable by the user. There are also times when you might develop an application with a great user interface but it is ruined by the dull Windows message box.
Fortunately it is very easy for C# developers to develop a custom message box of their own to incorporate it into their applications. In this article I will explain how to create a simple OK/Cancel message box. I will also make some suggestions on how you can improve on the message box by adding a timer feature.
You're now going to create a custom message box. Create a new Windows Application titled MyMessageBox. Set the properties for the form using the table below.
Property | Value |
Size | 400,150 |
FormBorderStyle | FixedToolWindow |
ShowInTaskBar | False |
StartPosition | CenterScreen |
Place two buttons on the form. Set the properties for button1
using the table below:
Property | Value |
Name | btnOk |
Location | 217, 86 |
Size | 84,27 |
Text | OK |
Now set the properties for button2
using the table below.
Property | Value |
Name | btnCancel |
Location | 307, 86 |
Size | 84,27 |
Text | Cancel |
Finally place a Label
on the form. Set the properties for label1
using the table below.
Property | Value |
Name | lblMessage |
Location | 9,7 |
The Code
The code for the custom message box is quite simple. First we need to declare a variable called Button_id
, this variable will hold a number either 1 or 2. If the user clicks the OK button, this variable will be set to 1 and if the user clicks the Cancel button the variable will be set to 2. This variable will be used to determine which button was clicked. The variable is declared as type string
and is a static variable.
We also need to define an object of MyMessageBox
which is also defined as static. Both should be declared just under public partial class...
static MyMessageBox newMessageBox;
static string Button_id;
The Windows C# MessageBox
class has a Show()
method. For our custom message box we will create a ShowBox()
method which will be an overloaded method. This overloaded method will take one or two parameters. This method will also be used as an Accessor. This means that not only can we use the method to set the message on our message box but we can also get a result back, that is, which button was clicked by the user (OK/Cancel). Below is the code for the ShowBox()
method.
public static string ShowBox(string txtMessage)
{
newMessageBox = new MyMessageBox();
newMessageBox.label1.Text = txtMessage;
newMessageBox.ShowDialog();
return Button_id;
}
Above is the first of the two overloaded ShowBox()
method. It takes one parameter, this parameter is the message to be displayed on our message box. Previously we defined an object newMessageBox
from our MyMessageBox
class, now in the ShowBox()
method we instantiated the object using the new
keyword.
Now that an object of MyMessageBox
class is created, we can set the label of the message box. After setting the message we need to show the message box, we use the method ShowDialog()
to show the message box as a dialog box. This means when our message box is displayed the user will not be able to interact with the form that created the message box until the user makes a choice either OK, Cancel or the X Close button.
Finally we use the return statement to return a value back to the calling method. This value as mentioned above is either 1, 2 or null if the X button is clicked.
The second overloaded method of the ShowBox()
method takes two parameters. The first is the message and the second is the title. The title is used to set the message box's title. If the ShowBox()
method is used with only one parameter then the message box's title will be that of the class name unless changed.
Finally we need to code both the OK and Cancel buttons. The code behind these two buttons is very simple. Both the bottoms need to dispose of the message box however before they dispose of the message box, they both need to store a value in the Button_id
variable. After storing a value into the variable the message box is then disposed of and execution returns to the calling method. The value stored in the variable Button_id
is also returned. This will allow the user to perform some processing. Below is the complete code.
static MyMessageBox newMessageBox;
static string Button_id;
public static string ShowBox(string txtMessage)
{
newMessageBox = new MyMessageBox();
newMessageBox.label1.Text = txtMessage;
newMessageBox.ShowDialog();
return Button_id;
}
public static string ShowBox(string txtMessage, string txtTitle)
{
newMessageBox = new MyMessageBox();
newMessageBox.label1.Text = txtMessage;
newMessageBox.Text = txtTitle;
newMessageBox.ShowDialog();
return Button_id;
}
private void btnOk_Click(object sender, EventArgs e)
{
Button_id = "1";
newMessageBox.Dispose();
}
private void btnCancel_Click(object sender, EventArgs e)
{
newMessageBox.Dispose();
Button_id = "2";
}
How to use the Message Box
Below are examples of how to use the custom message box.
Example 1
MyMessageBox.ShowBox("Do you want to exit?");
Example 2
MyMessageBox.ShowBox("Do you want to exit?", "Exit");
Example 3
string btnClicked = MyMessageBox.ShowBox("Do you want to exit");
if (btnClicked == "1")
{
}
else
{
}
Notice in the examples above you do not need to create an instance of the message box class. This is done in the ShowBox()
method. In this article I have explained how to make a simple OK/Cancel MessageBox however the C# MessageBox
class has many overloaded Show()
methods and many types of message box's such as Yes/No and you can also set the message box icon. By adding a few more overloaded ShowBox()
methods you can also cater for the message box type such as Yes/No or Ok/Cancel and even add a message box icon but that is not covered in this article. Please remember that this is only a simple example meant to give you an insight into how to create a custom message box.
Adding a Timer Feature
We can expand on our custom message box by adding a timer that will count down from a value and then dispose of the message box if the user has not made a choice. To achieve this we need a variable which will hold a value and create a timer which will decrement the value from the variable. Let's begin by adding a label to the message box which will display the timer value decrementing. Place a new label on the form and set the label2 properties using the table below.
Property | Value |
Name | lblTimer |
Location | 9, 100 |
We need to declare a new variable which will hold the decrementing timer value, the variable should be of type int. See the code fragment below.
static MyMessageBox newMessageBox;
static string Button_id;
int disposeFormTimer;
The next step is to create a timer. Rather than using the timer from the toolbox we will create a new timer object our self. The timer object should be created in the MyMessageBox_load
event. See the code fragment below.
private void MyMessageBox_Load(object sender, EventArgs e)
{
disposeFormTimer = 30;
Timer msgTimer = new Timer();
msgTimer.Interval = 1000;
msgTimer.Enabled = true;
msgTimer.Start();
msgTimer.Tick += new System.EventHandler(this.timer_tick);
}
The code above is fairly simple. We store the value 30 in the variable disposeFormTimer
. The timer object will then decrement from this value. We add a Tick
event to the msgTimer
timer object. This event name is timer_tick
, this event gets triggered every second. Finally we need to code the timer_tick
event. This event will simply decrement from the value stored in the disposeFormTimer
variable and update the lblTimer
label with the decrementing value. Below is the code fragment for the timer_tick
event.
private void timer_tick(object sender, EventArgs e)
{
disposeFormTimer--;
if (disposeFormTimer >= 0)
{
newMessageBox.lblTimer.Text = disposeFormTimer.ToString();
}
else
{
newMessageBox.Dispose();
}
}
The if statement checks the value of disposeFormTimer
variable. If it is greater or equal to zero then lblTimer
label will update with the new value stored in disposeFormTimer
. Once the value in disposeFormTimer
variable is below zero the message box will close using the dispose()
method.
By adding a timer to our message box we have given it an extra feature which the C# MessageBox
class does not have. Remember the point of making a custom message box is to either add new features or improve the UI of the messagebox.