Dialogs
In this part of the IronPython Mono Winforms tutorial, we will talk about dialogs.
Dialog windows or dialogs are an indispensable part of most modern GUI applications. A dialog is defined as a conversation between two or more persons. In a computer application a dialog is a window which is used to "talk" to the application. A dialog is used to input data, modify data, change the application settings etc. Dialogs are important means of communication between a user and a computer program.
There are essentially two types of dialogs. Predefined dialogs and custom dialogs.
FolderBrowserDialog
This dialog prompts the user to select a folder.
#!/usr/bin/ipy
import clr
clr.AddReference("System.Windows.Forms")
clr.AddReference("System.Drawing")
from System.Windows.Forms import Application, Form, StatusBar
from System.Windows.Forms import ToolBar, ToolBarButton, FolderBrowserDialog
from System.Windows.Forms import DialogResult
class IForm(Form):
def __init__(self):
self.Text = "FolderBrowserDialog"
toolbar = ToolBar()
toolbar.Parent = self
openb = ToolBarButton()
self.statusbar = StatusBar()
self.statusbar.Parent = self
toolbar.Buttons.Add(openb)
toolbar.ButtonClick += self.OnClicked
self.CenterToScreen()
def OnClicked(self, sender, event):
dialog = FolderBrowserDialog()
if (dialog.ShowDialog(self) == DialogResult.OK):
self.statusbar.Text = dialog.SelectedPath
Application.Run(IForm())
We have a toolbar and one toolbar button. By clicking on the button,
the FolderBrowserDialog appears on the screen.
The name of the selected folder is shown in the statusbar.
dialog = FolderBrowserDialog()
The FolderBrowserDialog is created.
if (dialog.ShowDialog(self) == DialogResult.OK):
self.statusbar.Text = dialog.SelectedPath
The ShowDialog() method shows the dialog on the screen.
If we click on the OK button of the dialog, the selected directory
path is shown on the statusbar.
ColorDialog
This dialog displays available colours along with controls that enable the user to define custom colours.
#!/usr/bin/ipy
import sys
import clr
clr.AddReference("System.Windows.Forms")
clr.AddReference("System.Drawing")
from System.Windows.Forms import Application, Form, ToolBar
from System.Windows.Forms import ToolBarButton, ControlStyles, ColorDialog
from System.Windows.Forms import DialogResult
from System.Drawing import Size, Color, SolidBrush, Rectangle
RECT_WIDTH = 100
RECT_HEIGHT = 100
class IForm(Form):
def __init__(self):
self.Text = "ColorDialog"
self.color = Color.Blue
toolbar = ToolBar()
toolbar.Parent = self
openb = ToolBarButton()
toolbar.Buttons.Add(openb)
toolbar.ButtonClick += self.OnClicked
self.LocateRect()
self.SetStyle(ControlStyles.ResizeRedraw, True)
self.Paint += self.OnPaint
self.CenterToScreen()
def OnPaint(self, event):
g = event.Graphics
self.LocateRect()
brush = SolidBrush(self.color)
g.FillRectangle(brush, self.r)
def OnClicked(self, sender, events):
dialog = ColorDialog()
if (dialog.ShowDialog(self) == DialogResult.OK):
self.color = dialog.Color
self.Invalidate()
def LocateRect(self):
x = (self.ClientSize.Width - RECT_WIDTH) / 2
y = (self.ClientSize.Height - RECT_HEIGHT) / 2
self.r = Rectangle(x, y, RECT_WIDTH, RECT_HEIGHT)
Application.Run(IForm())
In this code example, we use the ColorDialog to choose a colour
for a rectangle that is located in the middle of the form control.
self.color = Color.Blue
At the beginning, the colour of the rectangle is blue. We use the
self.color variable to determine the colour of the rectangle.
dialog = ColorDialog()
The ColorDialog is created.
if (dialog.ShowDialog(self) == DialogResult.OK):
self.color = dialog.Color
self.Invalidate()
The code shows the colour dialog. If we click on the OK button, we get
the selected colour and call the Invalidate() method.
The method invalidates the entire surface of the control and causes the control
to be redrawn. The result is that the rectangle is drawn with a new colour value.
FontDialog
The FontDialog is used to select fonts.
#!/usr/bin/ipy
import clr
clr.AddReference("System.Windows.Forms")
clr.AddReference("System.Drawing")
from System.Windows.Forms import Application, Form, StatusBar, Label
from System.Windows.Forms import ToolBar, ToolBarButton, FontDialog
from System.Windows.Forms import DialogResult
class IForm(Form):
def __init__(self):
self.Text = "FolderBrowserDialog"
self.text = Label()
self.text.Parent = self
self.text.Text = "Winforms tutorial"
self.LocateText()
toolbar = ToolBar()
toolbar.Parent = self
openb = ToolBarButton()
toolbar.Buttons.Add(openb)
toolbar.ButtonClick += self.OnClicked
self.text.AutoSize = True
self.Resize += self.OnResize
self.CenterToScreen()
def OnResize(self, sender, event):
self.LocateText()
def LocateText(self):
self.text.Top = (self.ClientSize.Height - self.text.Height) / 2
self.text.Left = (self.ClientSize.Width - self.text.Width) / 2
def OnClicked(self, sender, event):
dialog = FontDialog()
if (dialog.ShowDialog(self) == DialogResult.OK):
self.text.Font = dialog.Font
self.LocateText()
Application.Run(IForm())
We draw some text in the middle of the form control. We use the font dialog to change font for this text.
dialog = FontDialog()
FontDialog is created.
if (dialog.ShowDialog(self) == DialogResult.OK):
self.text.Font = dialog.Font
self.LocateText()
When we click on the OK button, we set a newly selected font for the
Label control. Because the size of the text changes
with different fonts, we must call the LocateText() method,
which locates the text in the middle of the form control.
OpenDialog
This dialog is used to open files.
#!/usr/bin/ipy
import clr
clr.AddReference("System.Windows.Forms")
clr.AddReference("System.Drawing")
from System.Windows.Forms import Application, Form, TextBox
from System.Windows.Forms import ToolBar, ToolBarButton, OpenFileDialog
from System.Windows.Forms import DialogResult, ScrollBars, DockStyle
class IForm(Form):
def __init__(self):
self.Text = "OpenDialog"
toolbar = ToolBar()
toolbar.Parent = self
openb = ToolBarButton()
self.textbox = TextBox()
self.textbox.Parent = self
self.textbox.Multiline = True
self.textbox.ScrollBars = ScrollBars.Both
self.textbox.WordWrap = False
self.textbox.Parent = self
self.textbox.Dock = DockStyle.Fill
toolbar.Buttons.Add(openb)
toolbar.ButtonClick += self.OnClicked
self.CenterToScreen()
def OnClicked(self, sender, event):
dialog = OpenFileDialog()
dialog.Filter = "C# files (*.cs)|*.cs"
if dialog.ShowDialog(self) == DialogResult.OK:
f = open(dialog.FileName)
data = f.read()
f.Close()
self.textbox.Text = data
Application.Run(IForm())
We use the OpenDialog control to open C# source files.
We have a TextBox control, where we display the file.
dialog = OpenFileDialog()
The OpenDialog is created.
dialog.Filter = "C# files (*.cs)|*.cs"
We set the Filter property to C# source files.
Only C# files can be chosen with this dialog instance.
if dialog.ShowDialog(self) == DialogResult.OK:
f = open(dialog.FileName)
data = f.read()
f.Close()
self.textbox.Text = data
After clicking OK, we read the contents of the chosen file and put it into
the TextBox control.
In this part of the IronPython Mono Winforms tutorial, we showed various dialogs.