فى هذه الجزئية سنتحدث على القوائم
شريط القوائم احد اوضح الأجزاء فى واجهة التطبيق، هو مجموعة من الأوامر المرتبطة موجودة فى قوائم. فى تطبيق الكونسول كنت تحتاج لتذكر كل هذه الأوامر، ولكن هنا نجدها مجمعة فى اماكن منطقية
فى المثال الأول، سننشئ شريط قوائم وبقائمة file والتى تحوى بدورها على عنصر واحد عند اختياره يتم غلق التطبيق
simplemenu.cs using Gtk; using System; class SharpApp : Window { public SharpApp() : base("Simple menu") { SetDefaultSize(250, 200); SetPosition(WindowPosition.Center); DeleteEvent += delegate { Application.Quit(); }; MenuBar mb = new MenuBar(); Menu filemenu = new Menu(); MenuItem file = new MenuItem("File"); file.Submenu = filemenu; MenuItem exit = new MenuItem("Exit"); exit.Activated += OnActivated; filemenu.Append(exit); mb.Append(file); VBox vbox = new VBox(false, 2); vbox.PackStart(mb, false, false, 0); Add(vbox); ShowAll(); } void OnActivated(object sender, EventArgs args) { Application.Quit(); } public static void Main() { Application.Init(); new SharpApp(); Application.Run(); } }
مثال بسيط على وظائف شريط الأدوات
MenuBar mb = new MenuBar();انشاء الشريط
Menu filemenu = new Menu(); MenuItem file = new MenuItem("File"); file.Submenu = filemenu;
انشاء العنصر العلوى file اللذى سيحوى قائمة filemenu
MenuItem exit = new MenuItem("Exit"); exit.Activated += OnActivated; filemenu.Append(exit);
انشاء العنصر exit واضافته للfilemenu
mb.Append(file);اضافة العنصر العلوى لشريط القوائم
VBox vbox = new VBox(false, 2); vbox.PackStart(mb, false, false, 0);
بعكس الtoolkits الأخرى، يجب علينا الإهتمام بإدارة المخططات بنفسنا، فنضع شريط القوائم فى صندوق رأسى
Figure: Simple menu
فى المثال التالى، سنستكشف القوائم اكثر.. سنضيف صورا ومسرعات -اختصارات- لعناصر القائمة
imagemenu.cs using Gtk; using System; class SharpApp : Window { public SharpApp() : base("Image menu") { SetDefaultSize(250, 200); SetPosition(WindowPosition.Center); DeleteEvent += delegate { Application.Quit(); }; MenuBar mb = new MenuBar(); Menu filemenu = new Menu(); MenuItem file = new MenuItem("File"); file.Submenu = filemenu; AccelGroup agr = new AccelGroup(); AddAccelGroup(agr); ImageMenuItem newi = new ImageMenuItem(Stock.New, agr); newi.AddAccelerator("activate", agr, new AccelKey( Gdk.Key.n, Gdk.ModifierType.ControlMask, AccelFlags.Visible)); filemenu.Append(newi); ImageMenuItem open = new ImageMenuItem(Stock.Open, agr); open.AddAccelerator("activate", agr, new AccelKey( Gdk.Key.n, Gdk.ModifierType.ControlMask, AccelFlags.Visible)); filemenu.Append(open); SeparatorMenuItem sep = new SeparatorMenuItem(); filemenu.Append(sep); ImageMenuItem exit = new ImageMenuItem(Stock.Quit, agr); exit.AddAccelerator("activate", agr, new AccelKey( Gdk.Key.q, Gdk.ModifierType.ControlMask, AccelFlags.Visible)); exit.Activated += OnActivated; filemenu.Append(exit); mb.Append(file); VBox vbox = new VBox(false, 2); vbox.PackStart(mb, false, false, 0); vbox.PackStart(new Label(), false, false, 0); Add(vbox); ShowAll(); } void OnActivated(object sender, EventArgs args) { Application.Quit(); } public static void Main() { Application.Init(); new SharpApp(); Application.Run(); } }
مثالنا يعرض قائمة علوية تحوى 3 عناصر فرعية كل منها له صورة ومسرع، المسرع لعنصر quit مفعل
AccelGroup agr = new AccelGroup(); AddAccelGroup(agr);
للعمل مع المسرعات.. ننشئ كائن عام من الصف AccelGroup.. سنستخدمه لاحقا
ImageMenuItem newi = new ImageMenuItem(Stock.New, agr);انشاء العنصر، والصورة تأتى من ال Stock وهى صورة ملف جديد
exit.AddAccelerator("activate", agr, new AccelKey( Gdk.Key.q, Gdk.ModifierType.ControlMask, AccelFlags.Visible));
هذا ينشئ مسرع -اختصار- من الزرين كنترول و Q للعنصر exit
SeparatorMenuItem sep = new SeparatorMenuItem(); filemenu.Append(sep);
السابق
ينشئ عنصر فاصل، ليتم تقسيم العناصر
لمجموعات منطقية
Figure: Image menu
يستخدم فى اضافة عنصر قابل للتنشيط، يستخدم للقيم المنطقية كال CheckButton
checkmenuitem.cs using Gtk; using System; class SharpApp : Window { private Statusbar statusbar; public SharpApp() : base("Check menu item") { SetDefaultSize(250, 200); SetPosition(WindowPosition.Center); DeleteEvent += delegate { Application.Quit(); }; MenuBar mb = new MenuBar(); Menu filemenu = new Menu(); MenuItem file = new MenuItem("File"); file.Submenu = filemenu; Menu viewmenu = new Menu(); MenuItem view = new MenuItem("View"); view.Submenu = viewmenu; CheckMenuItem stat = new CheckMenuItem("View Statusbar"); stat.Toggle(); stat.Toggled += OnStatusView; viewmenu.Append(stat); MenuItem exit = new MenuItem("Exit"); exit.Activated += OnActivated; filemenu.Append(exit); mb.Append(file); mb.Append(view); statusbar = new Statusbar(); statusbar.Push(1, "Ready"); VBox vbox = new VBox(false, 2); vbox.PackStart(mb, false, false, 0); vbox.PackStart(new Label(), true, false, 0); vbox.PackStart(statusbar, false, false, 0); Add(vbox); ShowAll(); } void OnStatusView(object sender, EventArgs args) { CheckMenuItem item = (CheckMenuItem) sender; if (item.Active) { statusbar.Show(); } else { statusbar.Hide(); } } void OnActivated(object sender, EventArgs args) { Application.Quit(); } public static void Main() { Application.Init(); new SharpApp(); Application.Run(); } }
فى مثالنا نعرض عنصر قابل للتنشيط ، وفى حال تنشيطه سيتم اظهار شريط الحالة وإلا سيكون مخفى
CheckMenuItem stat = new CheckMenuItem("View Statusbar");انشاء الكائن
stat.Toggle();الطريقة Toggle تعكس حالته
if (item.Active) { statusbar.Show(); } else { statusbar.Hide(); }
بناءا على حالة العنصر يتم تحديد حالة شريط الحالة
Figure: CheckMenuItem
فى مثالنا الأخير سنتعرض لكيفية انشاء قائمة فرعية فى GTK#
submenu.cs using Gtk; using System; class SharpApp : Window { public SharpApp() : base("Submenu") { SetDefaultSize(250, 200); SetPosition(WindowPosition.Center); DeleteEvent += delegate { Application.Quit(); }; MenuBar mb = new MenuBar(); Menu filemenu = new Menu(); MenuItem file = new MenuItem("File"); file.Submenu = filemenu; // submenu creation Menu imenu = new Menu(); MenuItem import = new MenuItem("Import"); import.Submenu = imenu; MenuItem inews = new MenuItem("Import news feed..."); MenuItem ibookmarks = new MenuItem("Import bookmarks..."); MenuItem imail = new MenuItem("Import mail..."); imenu.Append(inews); imenu.Append(ibookmarks); imenu.Append(imail); // exit menu item MenuItem exit = new MenuItem("Exit"); exit.Activated += OnActivated; filemenu.Append(import); filemenu.Append(exit); mb.Append(file); VBox vbox = new VBox(false, 2); vbox.PackStart(mb, false, false, 0); vbox.PackStart(new Label(), false, false, 0); Add(vbox); ShowAll(); } void OnActivated(object sender, EventArgs args) { Application.Quit(); } public static void Main() { Application.Init(); new SharpApp(); Application.Run(); } }
انشاء القائمة الفرعية
Menu imenu = new Menu();القائمة الفرعية هى قائمة لذا تنشئ من الصف Menu
MenuItem import = new MenuItem("Import"); import.Submenu = imenu;
وتكون هى القائمة الفرعية لعنصر ما، فنستطيع تحديد ذلك من الخاصية Submenu
MenuItem inews = new MenuItem("Import news feed..."); MenuItem ibookmarks = new MenuItem("Import bookmarks..."); MenuItem imail = new MenuItem("Import mail..."); imenu.Append(inews); imenu.Append(ibookmarks); imenu.Append(imail);
للقائمة الفرعية مجموعة من العناصر داخلها
Figure: Submenu
فى هذه الجزئية تعرضنا لإنشاء القوائم فى GTK#
Home Contents Top of Page