using Gtk; using System; class SharpApp : Window { public SharpApp() : base("Меню зі значками") { SetDefaultSize(300, 150); SetPosition(WindowPosition.Center); DeleteEvent += delegate {Application.Quit();}; MenuBar mb = new MenuBar(); // Рядок меню Menu filemenu = new Menu(); // Меню (перелік) MenuItem file = new MenuItem("Файл"); // Елемент рядка меню AccelGroup agr = new AccelGroup(); // Засіб для роботи з прискорювачами AddAccelGroup(agr); // Приєднання засобу для роботи з прискорювачами file.Submenu = filemenu; // Прив'язування меню до елемента рядка меню ImageMenuItem newi = new ImageMenuItem(Stock.New, agr);// Елемент меню (переліку) ImageMenuItem open = new ImageMenuItem(Stock.Open, agr);// Елемент меню (переліку) ImageMenuItem exit = new ImageMenuItem(Stock.Quit, agr);// Елемент меню (переліку) SeparatorMenuItem sep = new SeparatorMenuItem(); // Роздільник меню (переліку) newi.AddAccelerator("activate", agr, new AccelKey(Gdk.Key.n, Gdk.ModifierType.ControlMask, AccelFlags.Visible)); open.AddAccelerator("activate", agr, new AccelKey(Gdk.Key.n, Gdk.ModifierType.ControlMask, AccelFlags.Visible)); exit.AddAccelerator("activate", agr, new AccelKey(Gdk.Key.q, Gdk.ModifierType.ControlMask, AccelFlags.Visible)); // Обробники події активування елемента меню: open.Activated += OnOpenActivated; // open exit.Activated += OnExitActivated; // exit filemenu.Append(newi); // Додавання елементів до меню (переліку) filemenu.Append(open); // згори донизу filemenu.Append(sep); filemenu.Append(exit); mb.Append(file); // Вкладення меню у рядок меню VBox vbox = new VBox(false, 2); // Створення вертикального контейнера vbox.PackStart(mb, false, false, 0); // Вкладення у контейнер рядка меню Add(vbox); // Додавання контейнера ShowAll(); // Показ усього наявного } void OnOpenActivated(object sender, EventArgs args) { // Відповідь на активацію пункта меню open FileChooserDialog fcd = new FileChooserDialog ("Вибір файлу",this, FileChooserAction.Open, // FileChooserAction.Save, // можлива альтернатива для збереження "Вибрати", ResponseType.Ok, "Прийняти", ResponseType.Accept); fcd.AddButton (Gtk.Stock.Cancel, Gtk.ResponseType.Cancel).GrabDefault(); fcd.AddButton (Gtk.Stock.Close, Gtk.ResponseType.Close); fcd.SelectMultiple = true; // Можливість багатократного вибору в одному вікні // Відкриття вікна діалогу вибору файлу і визначення того, яку кнопку натиснуто Gtk.ResponseType response = (Gtk.ResponseType) fcd.Run (); // Виведення назви обраного файлу при натисканні кнопки з написом "Вибрати" if (response == Gtk.ResponseType.Ok) Console.WriteLine (fcd.Filename); // Виведення назв обраних файлів при натисканні кнопки з написом "Прийняти" if (response == Gtk.ResponseType.Accept) foreach (string s in fcd.Filenames) Console.WriteLine (s); fcd.Destroy(); // Діалог не буде автоматично закрито при натисканні кнопки, } // тому це потрібно робити самостійно void OnExitActivated(object sender, EventArgs args) { Application.Quit(); // Відповідь на активацію пункта меню exit } public static void Main() { Application.Init(); new SharpApp(); Application.Run(); } }