Home

Modal and Modeless Dialog Boxes

 

Modal Dialog Boxes

There are two types of dialog boxes: modal and modeless.

A Modal dialog box is one that the user must first close in order to have access to any other framed window or dialog box of the same application. One of the scenarios in which you use a dialog box is to create an application that is centered around one. In this case, if either there is no other form or dialog box in your application or all the other forms or dialog boxes depend on this central dialog box, it must be created as modal. Such an application is referred to as dialog-based.

Some applications require various dialog boxes to complete their functionality. When in case, you may need to call one dialog box from another and display it as modal. Here is an example:

The Date and Time dialog box of WordPad is modal: when it is displaying, the user cannot use any other part of WordPad unless he or she closes this object first

Modal

After creating a dialog used as an addition to an existing form or an existing dialog box, to call it as modal, use the ShowDialog() method.

Modeless Dialog Boxes

A dialog box is referred to as modeless if the user does not have to close it in order to continue using the application that owns the dialog box. A modeless dialog box has the following characteristics

  • It has a thin border
  • It can be neither minimized nor maximized. This means that it is not equipped with the Minimize or the Maximize buttons
  • It is not represented on the taskbar with a button
  • It must provide a way for the user to close it

Here is an example:

The Find (and the Replace) dialog box of WordPad (also the Find and the Replace dialog boxes of most applications) is an example of a modeless dialog box. If it is opened, the user does not have to close it in order to use the application or the document in the background.

Modeless

Since the modeless dialog box does not display its button on the task bar, the user should know that the dialog box is opened. To make the presence of a modeless dialog box obvious to the user, it typically displays on top of its host application until the user closes it.

A modeless dialog box is created from a form but it should look like a regular dialog box or a tool window. Therefore, to create a modeless dialog box, set the FormBorderStyle property to an appropriate value such as FixedSingle, FixedToolWindow, Sizable or SizableToolWindow. Also, set its ShowInTaskbar property to False.

After creating the dialog box, to display it as modeless, call the Show() method. The fundamental difference between the ShowDialog() and the Show() methods is that the former displays a modal dialog box, which makes sure that the called dialog box cannot go in the background of the main application. By contrast, the Show() method only calls the dialog box every time it is requested. For this reason, it is up to you to make sure that the modeless dialog box always remains on top of the application. This is easily taken care of by setting the Boolean TopMost property of the form to True.

There are two main ways a normal modeless dialog box can be dismissed:

  • If the user has finished using it, he or she can close it and recall it at will
  • When the form or application that owns the modeless dialog box is closed, the form or application closes the modeless dialog if it is opened; this means that you don't need to find out whether a modeless dialog box is still opened when the application is being destroyed: either the user or the application itself will take care of closing it

An Application With Various Forms or Dialog boxes

When you create a Windows Forms Application, the starting form is made available to you. If one form is not enough for your application, you can add as many as necessary. To add (or to create) a (new) form, you have various options:

  • On the main menu, you can click Project -> Add New Item...
  • On the main menu, you can click File -> Add New Item...
  • In Solution Explorer, you can right-click the name of the project, position the mouse on Add, and click Add New Item...

In the Add New Item dialog box and in the Templates section, click Window Form (.NET), provide a name in the Name edit box then click Open.

If your application is using various forms and you want to display a particular one at design time:

  • In the Forms Designer, you can click the tab that corresponds to the desired form and that has [Design]
  • On the main menu, you can click Window and click the name of the form in the list under Close All Documents
  • In Solution Explorer, expand the Header Files node if necessary and double-click the name of the desired form that has the .h extension

If you visually add two (or more) forms to your application, you may need to link them, allow one to call the other. To do this, in the top section of the file, type #include followed by the name of the header file in which the form was defined. In the section where you want to access the form, declare a handle to the class of the form and use the new operator to allocate memory for it. To display the other form, you can call its Show() method.

Practical LearningPractical Learning: Using Various Forms

  1. Display the first form
  2. Double-click the New Property... button and implement the event as follows:
     
    private void btnNewProperty_Click(object sender, EventArgs e)
    {
            Random rnd = new Random();
            PropertyEditor dlgEditor = new PropertyEditor();
    
            if (dlgEditor.ShowDialog() == DialogResult.OK)
            {
                    ListViewItem lvi = lvwProperties.Items.Add(
                           rnd.Next(100000, 999999).ToString());
                    lvi.SubItems.Add(dlgEditor.txtPropertyType.Text);
                    lvi.SubItems.Add(dlgEditor.txtBedrooms.Text);
                    lvi.SubItems.Add(dlgEditor.txtBathrooms.Text);
                    lvi.SubItems.Add(dlgEditor.txtMonthlyRent.Text);
            }
    }
  3. Execute the application and click the New Property... button
  4. Create a property
     
  5. Press Enter
  6. Create a few more properties and press Enter each time
     
  7. Close it and return to your programming environment
 

Previous Copyright © 2007 FunctionX, Inc. Home