المحتويات

القوائم و أِشرطة الأدوات فى مكتبات WinForms

سوف نتحدث عن القوائم و أِرطة الأداوت فى مكتبات WinForms فى هذا الجزء من الدرس

شريط القوائم من أهم الأجزاء فى أى تطبيق بواجهه رسومية و هى مجموعة من الأوامر على هيئة قوئم و بينما فى التطبيقات النصية فى سطر الأوامر لا بد من معرفة جميع الأوامر التى يوفرها التطبيق حتى تتعامل معه بشكل جيد سوف يتوفر لك فى الواجهه الرسومية الأامر عن طريق قوائم سلسة مما يسهل لك تعلم البرنامج إن كان جديداً بسهولة و سرعة.

قائمة بسيطة

فى المثال الأول سوف نقوم بإنشاء قائمة بسيطة.

simplemenu.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 Keys, MenuStrip, ToolStripMenuItem
from System.Drawing import Size

class IForm(Form):

    def __init__(self):
        self.Text = 'Simple Menu'
        self.Size = Size(250, 200)

        ms = MenuStrip()
        ms.Parent = self
        
        filem = ToolStripMenuItem("&File")         
        exit = ToolStripMenuItem("&Exit", None,
            self.OnExit)  
        exit.ShortcutKeys = Keys.Control | Keys.X
        filem.DropDownItems.Add(exit)

        ms.Items.Add(filem)
        self.MainMenuStrip = ms
        
        self.CenterToScreen()
    

    def OnExit(self, sender, event):
        self.Close()
    

Application.Run(IForm())

فى المثال هناك شريط ثوائم و بداخلة قائمة واحدة و بداخل هذه القائمة عنصر إذا ضغطنا عليه يتم إغلاق التطبيق.

الحظ أنه يمكننا إغلاق التطبيق بعدة طرق فمثلاً يمكننا ذلك عن طريق الإختصار Ctrl+X أو الضغط على Alt و أزرة F و E.

 ms = MenuStrip()

MenuStrip تنشأ نظام ثوائم فى النافذة و لقد أضفنا كائن ToolStripMenuItem إلى الـMenuStrip و الذى يمثل أمر منفرد فى بنية القائمة و كل ToolStripMenuItem يمكنه أن يكون أمر فى التطبيق أو قائمة حاوية لأى عنصر متفرع آخر submenu item.

 filem = ToolStripMenuItem("&File")           

هنا تم إنشاء القائمة.

 exit = ToolStripMenuItem("&Exit", None,
     self.OnExit)     

و فى هذا السطر تم إنشاء عنصر القائمة exit.

 exit.ShortcutKeys = Keys.Control | Keys.X

و هنا قمنا بإضافة إختصار إلى عنصر القائمة exit.

 filem.DropDownItems.Add(exit)

عنصر القائمة exit تمت إضافته إلى العناصر المنسدلة من كائن القائمة.

 ms.Items.Add(filem)   

هنا أضفنا كائن القائمة إلى menu strip.

 self.MainMenuStrip = ms

هنا تم إدخال الــMenuStrip فى النافذة.


Simple menu

Figure: Simple menu

القائمة الفرعية

أى قائمة يمكن أيضاً أن تكون قائمة فرعية و بهذه الطريقة يمكننا تجميع الأوامر المتشابهه فى مجموعتا و كمثال يمكننا وضع الأوامر التى تخفى و تظهر شرائط الأدوات مثل الشريط الشخصى personal bar و شريط العنوان adress bar و شريط المعلومات أو الحالة status bar أو شريط الذهاب إلى صفحة ويب navigation bar داخل قائمة فرعية تسمى أشرطة الأداوت toolbars.

submenu.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 MenuStrip, ToolStripMenuItem
from System.Drawing import Size

class IForm(Form):

    def __init__(self):
        self.Text = 'Simple Menu'
        self.Size = Size(380, 200)

        ms = MenuStrip()
        ms.Parent = self

        filem = ToolStripMenuItem("&File")
        exit = ToolStripMenuItem("&Exit", None,
            self.OnExit)

        importm = ToolStripMenuItem()
        importm.Text = "Import"

        filem.DropDownItems.Add(importm)

        temp = ToolStripMenuItem()
        temp.Text = "Import newsfeed list..."
        importm.DropDownItems.Add(temp)

        temp = ToolStripMenuItem()
        temp.Text = "Import bookmarks..."
        importm.DropDownItems.Add(temp)

        temp = ToolStripMenuItem()
        temp.Text = "Import mail..."
        importm.DropDownItems.Add(temp)

        filem.DropDownItems.Add(exit)

        ms.Items.Add(filem)
        self.MainMenuStrip = ms
        
        self.CenterToScreen()
    

    def OnExit(self, sender, event):
        self.Close()
    

Application.Run(IForm())

فى هذا المثال قمنا بإنشاء قائمة فرعية واحدة و تحتوى على ثلاث عناصر قائمة.

 importm = ToolStripMenuItem()
 importm.Text = "Import"

ToolStripMenuItem يمكنها أن تكون قائمة فرعية أو قائمة و لكن هنا سوف تكون فائمة فرعية.

 temp = ToolStripMenuItem()
 temp.Text = "Import newsfeed list..."
 importm.DropDownItems.Add(temp)

هنا أنئشأنا عنصر قائمة و أضفناه إلى القائمة الفرعية Import.


Submenu

Figure: Submenu

عنصر القائمة المحدد Check menu item

فى هذا الكود سوف نتعرض إلى كيفية إنشاء عنصر قائمة قابل للتحديد.

checkmenuitem.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 Shortcut, MainMenu, MenuItem
from System.Drawing import Size



class IForm(Form):

    def __init__(self):
        self.Text = 'Simple Menu'
        
        self.sb = StatusBar()
        self.sb.Parent = self
        self.sb.Text = "Ready"

        mainMenu = MainMenu()

        filem = mainMenu.MenuItems.Add("&File")    
        filem.MenuItems.Add(MenuItem("E&xit", 
                 self.OnExit, Shortcut.CtrlX))

        view = mainMenu.MenuItems.Add("&View")
        self.viewStatusBar = MenuItem("View StatusBar")
        self.viewStatusBar.Checked = True
        self.viewStatusBar.Click += self.ToggleStatusBar
        view.MenuItems.Add(self.viewStatusBar)

        self.Menu = mainMenu
        self.Size = Size(250, 200)

        self.CenterToScreen()
    
    def OnExit(self, sender, event):
        self.Close()


    def ToggleStatusBar(self, sender, event):
        check = self.viewStatusBar.Checked

        if (check):
            self.sb.Visible = False
            self.viewStatusBar.Checked = False
        else:
            self.sb.Visible = True
            self.viewStatusBar.Checked = True
        
    
Application.Run(IForm())

ليدنا قائمتين File و View و القائمة View تحتوى على عنصر قائمة يحدد إظهار أو إخفاء شريط الحالة.

 mainMenu = MainMenu()

فى هذا المثال استخدمنا الأداة MainMenu و لكى ننشأ قائمة يمكننا استخدام إما MainMenu أو MenuStrip و الأخيرة بها خيارات إضافية.

 self.viewStatusBar.Checked = True

هذه القائمة افتراضياً محددة لأن شريط الحالة ظاهر عند بدأ البرنامج.

 check = self.viewStatusBar.Checked

 if (check):
     self.sb.Visible = False
     self.viewStatusBar.Checked = False
 else:
     self.sb.Visible = True
     self.viewStatusBar.Checked = True

هنا نربط بين تحديد شريط القوائم و حالة شريط الحالة من حيث الظهر أو الإخفاء فإذا كان شريط الحالة ظاهر يكون عنصر القائمة محدد و إذا لم يكن يكون عنصر القائمة غير محدد و تعتمد تحديد أو إلغاء تحديد عنصر القائمة على قيمة check.


Check menu item

Figure: Check menu item

الصور و الفواصل

سوف نتعرض و نعرف أكثر عن الأداة MenuStrip فسوف ننشأ عنصر قائمة يحتوى على صورة و أيضاً كيفية فصل العناصر بفاصل sperator.

menustrip.py

#!/usr/bin/ipy

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

from System.Windows.Forms import Application, Form, MenuStrip
from System.Windows.Forms import ToolStripMenuItem, ToolStripSeparator
from System.Drawing import Size, Image

class IForm(Form):

    def __init__(self):
        self.Text = 'MenuStrip'
        self.Size = Size(250, 200)

        menuStrip = MenuStrip()
   
        titem1 = ToolStripMenuItem("File")
        menuStrip.Items.Add(titem1)
  
        titem2 = ToolStripMenuItem("Tools")
        menuStrip.Items.Add(titem2)
  
        subm1 = ToolStripMenuItem("New")
        subm1.Image = Image.FromFile("new.png")
        titem1.DropDownItems.Add(subm1)
   
        subm2 = ToolStripMenuItem("Open") 
        subm2.Image = Image.FromFile("open.png")
        titem1.DropDownItems.Add(subm2)
  
        titem1.DropDownItems.Add(ToolStripSeparator())

        subm3 = ToolStripMenuItem("Exit")
        subm3.Image = Image.FromFile("exit.png")
        titem1.DropDownItems.Add(subm3)  
  
        subm3.Click += self.OnExit
        self.Controls.Add(menuStrip)
        self.MainMenuStrip = menuStrip 
        
        self.CenterToScreen()
    

    def OnExit(self, sender, event):
        self.Close()
    

Application.Run(IForm())

فى كود المثال لدينا قائمتين File و Tools و فى القائمة File لدينا ثلاثة عناصر تحتوى على صور و لدينا أيضاً فاصل واحدو لايد أن تكون الصور بنوع png موجودة داخل مجلد العمل الذى يحتوى على التطبيق.

 subm1 = ToolStripMenuItem("New")
 subm1.Image = Image.FromFile("new.png")
 titem1.DropDownItems.Add(subm1)

هنا أنشأنا أول عنصر قائمة و لإضافة صورة غيرنا الخاصية Image إلى الصورة المرادة عن طريق إنشاء صورة من ملف بإٍتخدام الدالة FormFile().

 titem1.DropDownItems.Add(ToolStripSeparator())

هنا أضفنا فاصل للقائمة File.


MenuStrip

Figure: Images and separator

أشرطة الأدوات

القوائم المنسدلة تجمع جميع الأوامر التى من الممكن أن نستخدمها فى التطبيق أما أشرطة الأدوات فتعطى وصولاً سريعاً لأهم و أكثر الأوامر استخداماً فى التطبيق.الأداة ToolBar تستخدم لعرض الأداة ToolBarButton زر شريط أدواتو من الممكن وضع صورة للزر عن طريق إنشاء ImageList ثخصيصها للخاصية ImageList فى شريط الأدوات و تحديد رقم فهرسة الصورة فى الخاصية ImageIndex لكل زر ToolBarButton.

toolbar.py

#!/usr/bin/ipy

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

from System.Windows.Forms import Application, Form
from System.Windows.Forms import ToolBar, ToolBarButton, ImageList
from System.Drawing import Size, Icon



class IForm(Form):

    def __init__(self):
        self.Text = 'Simple ToolBar'
        self.Size = Size(250, 200)

        toolBar = ToolBar()
        toolBarIcons = ImageList()
        save = ToolBarButton()
        exit = ToolBarButton()

        save.ImageIndex = 0
        save.Tag = "Save"
        exit.ImageIndex = 1
        exit.Tag = "Exit"

        toolBar.ImageList = toolBarIcons
        toolBar.ShowToolTips = True
        toolBar.Buttons.AddRange((save, exit))
        toolBar.ButtonClick += self.OnClicked
    
        toolBarIcons.ImageSize = Size(16, 16)
        toolBarIcons.Images.Add(Icon("new.ico"))
        toolBarIcons.Images.Add(Icon("exit.ico"))

        self.Controls.Add(toolBar)
        self.CenterToScreen()
    
    def OnClicked(self, sender, event):
        if event.Button.Tag == "Exit":
            self.Close()
    

Application.Run(IForm())

فى مثالنا عرضنا زرين على شريط الأدوات.

 toolBar = ToolBar()

هنا أنشأنا الأداة ToolBar.

 toolBarIcons = ImageList()

هنا أنشأنا قائمة الصور image list.

 save = ToolBarButton()
 exit = ToolBarButton()

هناك زرين أشرطة أداوت.

 save.ImageIndex = 0

حددنا أى أيكونة سوف تستخدم من قائمة الصور للزر save.

 toolBar.Buttons.AddRange((save, exit))

الأدوات ToolBarButton تم إضافتها إلى شريط الأدوات.

 toolBarIcons.Images.Add(Icon("new.ico"))
 toolBarIcons.Images.Add(Icon("exit.ico"))

تمت إضافة الأيكونات إلى قائمة الصور.

 if event.Button.Tag == "Exit":
     self.Close()

إذا كان وسم الزر يساوى "Exit” فسوف يغلق التطبيق.


ToolBar

Figure: ToolBar

هذا الجزء من الدرس يتحدث عن أشرطة الأداوت و القوائم.


المحتويات