Basic Controls II in Mono Winforms

In this part of the IronPython Mono Winforms tutorial, we will continue introducing basic Mono Winforms controls.

RadioButton

The RadioButton control enables the user to select a single option from a group of choices when paired with other RadioButton controls. The GroupBox control is used to pair radio buttons together.

radiobutton.py
#!/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 RadioButton, GroupBox
from System.Drawing import Size, Point


class IForm(Form):

    def __init__(self):

        self.Text = "RadioButton"
        self.Size = Size(240, 240)

        gb = GroupBox()
        gb.Text = "Sex"
        gb.Size = Size(120, 110)
        gb.Location = Point(20, 20)
        gb.Parent = self

        male = RadioButton()
        male.Text = "Male"
        male.Parent = gb
        male.Location = Point(10, 30)
        male.CheckedChanged += self.OnChanged


        female = RadioButton()
        female.Text = "Female"
        female.Parent = gb
        female.Location = Point(10, 60)
        female.CheckedChanged += self.OnChanged

        self.statusbar = StatusBar()
        self.statusbar.Parent = self

        self.CenterToScreen()

    def OnChanged(self, sender, event):
        if sender.Checked:
            self.statusbar.Text = sender.Text
    
    
Application.Run(IForm())

In our example, we show two radio buttons in a group box. Only one option is selectable at a time. The option value is shown in the statusbar.

gb = GroupBox()
gb.Text = "Sex"

GroupBox control is used to group radio buttons together. This way we can choose only one radio button control at a time.

male = RadioButton()
male.Text = "Male"
male.Parent = gb

RadioButton control with text "Male" is created. Its parent is the group box control.

def OnChanged(self, sender, event):
    if sender.Checked:
        self.statusbar.Text = sender.Text

The OnChanged() method sets the text of the currently selected radio button to the statusbar control.

RadioButton
Figure: RadioButton

MonthCalendar

In the next example, we will show a MonthCalendar control. The MonthCalendar control allows the user to select a date using a visual display.

monthcalendar.py
#!/usr/bin/ipy

import clr
clr.AddReference("System.Windows.Forms")
clr.AddReference("System.Drawing")

from System.Windows.Forms import Application, Form
from System.Windows.Forms import Label, MonthCalendar
from System.Drawing import Size, Point


class IForm(Form):

    def __init__(self):
        self.Text = 'MonthCalendar'
        self.Size = Size(240, 240)
        
        calendar = MonthCalendar()
        calendar.Parent = self
        calendar.Location = Point(20, 20)
        calendar.DateSelected += self.OnSelected

        self.date = Label()
        self.date.Location = Point(30, 180)
        self.date.Parent = self
        dt = calendar.SelectionStart
        self.date.Text = str(dt.Month) + "/" + str(dt.Day) + "/" + str(dt.Year)
        
        self.CenterToScreen()
    

    def OnSelected(self, sender, event): 
        dt = sender.SelectionStart
        self.date.Text = str(dt.Month) + "/" + str(dt.Day) + "/" + str(dt.Year)
    

Application.Run(IForm())

In the example, we show a MonthCalendar and a Label.

calendar = MonthCalendar()
...
self.date = Label()

We have two controls. A MonthCalendar and a Label. The latter shows the currently selected date.

def OnSelected(self, sender, event): 
    dt = sender.SelectionStart
    self.date.Text = str(dt.Month) + "/" + str(dt.Day) + "/" + str(dt.Year)

When we select a date from the MonthCalendar, the OnSelected() method is called. The SelectionStart property gets the start date of the selected range of dates.

MonthCalendar
Figure: MonthCalendar

TextBox

The TextBox control is used to display or accept some text. The text can be single or multiline. This control is also capable of password masking.

textbox.py
#!/usr/bin/ipy

import clr
clr.AddReference("System.Windows.Forms")
clr.AddReference("System.Drawing")

from System.Windows.Forms import Application, Form
from System.Windows.Forms import Label, TextBox
from System.Drawing import Size, Point



class IForm(Form):

    def __init__(self):

        self.Text = 'TextBox'

        self.text = Label()
        self.text.Parent = self
        self.text.Text = "..."
        self.text.AutoSize = True
        self.text.Location = Point(60, 40)

        tbox = TextBox()
        tbox.Parent = self
        tbox.Location = Point(60, 100)
        tbox.KeyUp += self.OnKeyUp

        self.Size = Size(250, 200)
        self.CenterToScreen()
    

    def OnKeyUp(self, sender, event): 
        self.text.Text = sender.Text
    

Application.Run(IForm())

This example shows a text box and a label. The text that we key in the text box is displayed immediately in the label control.

self.text = Label()
...
self.text.AutoSize = True

The Label control is created. The AutoSize property ensures that the Label grows to show the text.

tbox = TextBox()
...
tbox.KeyUp += self.OnKeyUp

We plug in the KeyUp event into the TextBox control. When we release the key, OnKeyUp() method is called.

def OnKeyUp(self, sender, event): 
    self.text.Text = sender.Text

In the OnKeyUp() method we update the label control with the text from the text box control.

TextBox
Figure: TextBox

PictureBox

The PictureBox control is used for displaying a picture on the form.

picturebox.py
#!/usr/bin/ipy

import sys
import clr
clr.AddReference("System.Windows.Forms")
clr.AddReference("System.Drawing")

from System.Windows.Forms import Application, Form, PictureBox
from System.Drawing import Size, Point, Bitmap


class IForm(Form):

    def __init__(self):
        self.Text = 'PictureBox'
        
        try:
            castle = Bitmap('redrock.png') 
        except Exception, e:
            print 'Cannot read image file'
            print e.msg
            sys.exit(1)
 
        pb = PictureBox()
        pb.Parent = self
        pb.Size = Size(castle.Width, castle.Height)
        pb.Location = Point(2, 2)
        pb.Image = castle

        self.Size = Size(castle.Width, castle.Height)
        self.CenterToScreen()


Application.Run(IForm())

The example shows a png image on the form.

try:
    castle = Bitmap('redrock.png') 
except Exception, e:
    print 'Cannot read image file'
    print e.msg
    sys.exit(1)      

We get a bitmap from the current working directory.

pb = PictureBox()     

The PictureBox control is created.

pb.Image = castle    

The Image property points to the bitmap, we have created.

self.Size = Size(castle.Width, castle.Height)

The size of the form is equal to the size of the bitmap.

PictureBox
Figure: PictureBox

We have finished chapter of the Mono Winforms programming tutorial, dedicated to basic controls.