返回介绍

Dialogs

发布于 2025-02-22 22:19:49 字数 9079 浏览 0 评论 0 收藏 0

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.

folderbrowserdialog.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 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.

FolderBrowserDialog
Figure: FolderBrowserDialog

ColorDialog

This dialog displays available colours along with controls that enable the user to define custom colours.

colordialog.py

#!/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.

ColorDialog
Figure: ColorDialog

FontDialog

The FontDialog is used to select fonts.

fontdialog.py

#!/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.

FontDialog
Figure: FontDialog

OpenDialog

This dialog is used to open files.

opendialog.py

#!/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.

OpenDialog
Figure: OpenDialog

In this part of the IronPython Mono Winforms tutorial, we showed various dialogs.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文