原文: http://zetcode.com/gui/csharpwinforms/menustoolbars/

在 Mono Winforms 教程的这一部分中,我们将讨论菜单和工具栏。

菜单栏是 GUI 应用中最可见的部分之一。 它是位于各个菜单中的一组命令。 在控制台应用中,您必须记住所有这些神秘命令,在这里,我们将大多数命令分组为逻辑部分。 有公认的标准可以进一步减少学习新应用的时间。

简单菜单

在第一个示例中,我们创建一个简单的菜单。

simplemenu.cs

  1. using System;
  2. using System.Drawing;
  3. using System.Windows.Forms;
  4. class MForm : Form {
  5. public MForm() {
  6. Text = "Simple menu";
  7. MenuStrip ms = new MenuStrip();
  8. ms.Parent = this;
  9. ToolStripMenuItem file = new ToolStripMenuItem("&File");
  10. ToolStripMenuItem exit = new ToolStripMenuItem("&Exit", null,
  11. new EventHandler(OnExit));
  12. exit.ShortcutKeys = Keys.Control | Keys.X;
  13. file.DropDownItems.Add(exit);
  14. ms.Items.Add(file);
  15. MainMenuStrip = ms;
  16. Size = new Size(250, 200);
  17. CenterToScreen();
  18. }
  19. void OnExit(object sender, EventArgs e) {
  20. Close();
  21. }
  22. }
  23. class MApplication {
  24. public static void Main() {
  25. Application.Run(new MForm());
  26. }
  27. }

在我们的示例中,我们有一个菜单栏和一个菜单。 菜单内有一个菜单项。 如果选择菜单项,则应用关闭。

注意如何关闭应用。 我们可以使用 Ctrl + X 快捷方式或按 AltFE 键关闭它 。

  1. MenuStrip ms = new MenuStrip();

MenuStrip为我们的表单创建一个菜单系统。 我们将ToolStripMenuItem对象添加到 MenuStrip 中,这些对象代表菜单结构中的各个菜单命令。 每个ToolStripMenuItem可以是您的应用的命令,也可以是其他子菜单项的父菜单。

  1. ToolStripMenuItem file = new ToolStripMenuItem("&File");

在这里,我们创建一个菜单。

  1. ToolStripMenuItem exit = new ToolStripMenuItem("&Exit", null,
  2. new EventHandler(OnExit));

此行创建退出菜单项。

  1. exit.ShortcutKeys = Keys.Control | Keys.X;

我们提供了退出菜单项的快捷方式。

  1. file.DropDownItems.Add(exit);

退出菜单项将添加到菜单对象的下拉项中。

  1. ms.Items.Add(file);

在这里,我们将菜单对象添加到菜单栏中。

  1. MainMenuStrip = ms;

MenuStrip已插入表格。

Mono Winforms 中的菜单和工具栏 - 图1

图:简单菜单

子菜单

每个菜单项也可以有一个子菜单。 这样,我们可以将类似的命令分组。 例如,我们可以将隐藏/显示各种工具栏(例如个人栏,地址栏,状态栏或导航栏)的命令放置在称为工具栏的子菜单中。

submenu.cs

  1. using System;
  2. using System.Drawing;
  3. using System.Windows.Forms;
  4. class MForm : Form {
  5. public MForm() {
  6. Text = "Submenu";
  7. MenuStrip ms = new MenuStrip();
  8. ms.Parent = this;
  9. ToolStripMenuItem file = new ToolStripMenuItem("&File");
  10. ToolStripMenuItem exit = new ToolStripMenuItem("&Exit", null,
  11. new EventHandler(OnExit));
  12. ToolStripMenuItem import = new ToolStripMenuItem();
  13. import.Text = "Import";
  14. file.DropDownItems.Add(import);
  15. ToolStripMenuItem temp = new ToolStripMenuItem();
  16. temp.Text = "Import newsfeed list...";
  17. import.DropDownItems.Add(temp);
  18. temp = new ToolStripMenuItem();
  19. temp.Text = "Import bookmarks...";
  20. import.DropDownItems.Add(temp);
  21. temp = new ToolStripMenuItem();
  22. temp.Text = "Import mail...";
  23. import.DropDownItems.Add(temp);
  24. file.DropDownItems.Add(exit);
  25. ms.Items.Add(file);
  26. MainMenuStrip = ms;
  27. Size = new Size(380, 200);
  28. CenterToScreen();
  29. }
  30. void OnExit(object sender, EventArgs e) {
  31. Close();
  32. }
  33. }
  34. class MApplication {
  35. public static void Main() {
  36. Application.Run(new MForm());
  37. }
  38. }

在此示例中,我们创建一个子菜单。 子菜单导入具有三个菜单项。

  1. ToolStripMenuItem import = new ToolStripMenuItem();
  2. import.Text = "Import";

ToolStripMenuItem可以是菜单或菜单项。 在这里它将作为子菜单。

  1. ToolStripMenuItem temp = new ToolStripMenuItem();
  2. temp.Text = "Import newsfeed list...";
  3. import.DropDownItems.Add(temp);

在这里,我们创建一个菜单项并将其添加到“导入”子菜单。

Mono Winforms 中的菜单和工具栏 - 图2

图:子菜单

复选菜单项

下一个代码示例演示如何创建复选菜单项。

checkmenuitem.cs

  1. using System;
  2. using System.Drawing;
  3. using System.Windows.Forms;
  4. class MForm : Form {
  5. private StatusBar sb;
  6. private MenuItem viewStatusBar;
  7. public MForm() {
  8. Text = "Check menu item";
  9. sb = new StatusBar();
  10. sb.Parent = this;
  11. sb.Text = "Ready";
  12. MainMenu mainMenu = new MainMenu();
  13. MenuItem file = mainMenu.MenuItems.Add("&File");
  14. file.MenuItems.Add(new MenuItem("E&xit",
  15. new EventHandler(OnExit), Shortcut.CtrlX));
  16. MenuItem view = mainMenu.MenuItems.Add("&View");
  17. viewStatusBar = new MenuItem("View StatusBar");
  18. viewStatusBar.Checked = true;
  19. viewStatusBar.Click += new EventHandler(ToggleStatusBar);
  20. view.MenuItems.Add(viewStatusBar);
  21. Menu = mainMenu;
  22. Size = new Size(250, 200);
  23. CenterToScreen();
  24. }
  25. void OnExit(object sender, EventArgs e) {
  26. Close();
  27. }
  28. void ToggleStatusBar(object sender, EventArgs e) {
  29. bool check = viewStatusBar.Checked;
  30. if (check) {
  31. sb.Visible = false;
  32. viewStatusBar.Checked = false;
  33. } else {
  34. sb.Visible = true;
  35. viewStatusBar.Checked = true;
  36. }
  37. }
  38. }
  39. class MApplication {
  40. public static void Main() {
  41. Application.Run(new MForm());
  42. }
  43. }

我们有两个菜单。 文件和查看。 “查看”菜单具有一个菜单项,用于切换状态栏的可见性。

  1. MainMenu mainMenu = new MainMenu();

在此示例中,我们使用MainMenu控件。 要创建菜单栏,我们可以使用MainMenuMenuStrip控件。 后者具有一些附加功能。

  1. viewStatusBar.Checked = true;

默认情况下会选中此菜单项,因为状态栏从应用的开始就可见。

  1. bool check = viewStatusBar.Checked;
  2. if (check) {
  3. sb.Visible = false;
  4. viewStatusBar.Checked = false;
  5. } else {
  6. sb.Visible = true;
  7. viewStatusBar.Checked = true;
  8. }

我们确定菜单项是否被选中。 我们根据check值显示和隐藏状态栏和复选标记。

Mono Winforms 中的菜单和工具栏 - 图3

图:选中菜单项

图像,分隔符

我们将进一步增强对MenuStrip控件的了解。 我们将创建一个带有图像的菜单项,并显示如何使用分隔符将其分开。

menustrip.cs

  1. using System;
  2. using System.Drawing;
  3. using System.Windows.Forms;
  4. class MForm : Form {
  5. public MForm() {
  6. Text = "MenuStrip";
  7. Size = new Size(250, 200);
  8. MenuStrip menuStrip = new MenuStrip();
  9. ToolStripMenuItem titem1 = new ToolStripMenuItem("File");
  10. menuStrip.Items.Add(titem1);
  11. ToolStripMenuItem titem2 = new ToolStripMenuItem("Tools");
  12. menuStrip.Items.Add(titem2);
  13. ToolStripMenuItem subm1 = new ToolStripMenuItem("New");
  14. subm1.Image = Image.FromFile("new.png");
  15. titem1.DropDownItems.Add(subm1);
  16. ToolStripMenuItem subm2 = new ToolStripMenuItem("Open");
  17. subm2.Image = Image.FromFile("open.png");
  18. titem1.DropDownItems.Add(subm2);
  19. titem1.DropDownItems.Add(new ToolStripSeparator());
  20. ToolStripMenuItem subm3 = new ToolStripMenuItem("Exit");
  21. subm3.Image = Image.FromFile("exit.png");
  22. titem1.DropDownItems.Add(subm3);
  23. subm3.Click += OnExit;
  24. Controls.Add(menuStrip);
  25. MainMenuStrip = menuStrip;
  26. CenterToScreen();
  27. }
  28. public static void Main() {
  29. Application.Run(new MForm());
  30. }
  31. void OnExit(object sender, EventArgs e) {
  32. Close();
  33. }
  34. }

我们的代码示例中有两个菜单。 文件和工具。 在文件中,我们有三个带有图像的菜单项。 我们还有一个分隔符。 在此示例中,PNG 图像必须位于当前工作目录中。

  1. ToolStripMenuItem subm1 = new ToolStripMenuItem("New");
  2. subm1.Image = Image.FromFile("new.png");
  3. titem1.DropDownItems.Add(subm1);

在这里,我们创建第一个菜单项。 要将图像添加到项目,我们将Image属性设置为图像。 我们使用静态FromFile()方法从指定的文件创建一个Image

  1. titem1.DropDownItems.Add(new ToolStripSeparator());

在这里,我们向“文件”菜单添加分隔符。

Mono Winforms 中的菜单和工具栏 - 图4

图:图像 s and separator

工具栏

菜单将我们可以在应用中使用的所有命令分组。 使用工具栏可以快速访问最常用的命令。 ToolBar控件用于显示ToolBarButton控件。 我们可以通过创建ImageList将图像分配给按钮。 然后,我们将图像列表分配给工具栏的ImageList属性,并为每个ToolBarButton将图像索引值分配给ImageIndex属性。

toolbar.cs

  1. using System;
  2. using System.Drawing;
  3. using System.Windows.Forms;
  4. public class MForm : Form
  5. {
  6. private ImageList toolBarIcons;
  7. private ToolBarButton save;
  8. private ToolBarButton exit;
  9. private ToolBar toolBar;
  10. public MForm()
  11. {
  12. Size = new Size(250, 200);
  13. Text = "Simple toolbar";
  14. toolBar = new ToolBar();
  15. toolBar.Parent = this;
  16. toolBarIcons = new ImageList();
  17. save = new ToolBarButton();
  18. exit = new ToolBarButton();
  19. save.ImageIndex = 0;
  20. save.Tag = "Save";
  21. exit.ImageIndex = 1;
  22. exit.Tag = "Exit";
  23. toolBar.ImageList = toolBarIcons;
  24. toolBar.ShowToolTips = true;
  25. toolBar.Buttons.AddRange(new ToolBarButton[] {save, exit});
  26. toolBar.ButtonClick += new ToolBarButtonClickEventHandler(OnClicked);
  27. toolBarIcons.Images.Add(new Icon("new.ico"));
  28. toolBarIcons.Images.Add(new Icon("exit.ico"));
  29. CenterToScreen();
  30. }
  31. static void Main()
  32. {
  33. Application.Run(new MForm());
  34. }
  35. void OnClicked(object sender, ToolBarButtonClickEventArgs e)
  36. {
  37. if (e.Button.Tag.Equals("Exit"))
  38. Close();
  39. }
  40. }

在我们的示例中,我们在工具栏上显示了两个按钮。

  1. toolBar = new ToolBar();

在这里,我们创建ToolBar控件。

  1. toolBarIcons = new ImageList();

创建图像列表。

  1. save = new ToolBarButton();
  2. exit = new ToolBarButton();

这是两个工具栏按钮。

  1. save.ImageIndex = 0;

我们确定图像列表中的哪个图标将用于保存工具栏按钮。

  1. toolBar.Buttons.AddRange(new ToolBarButton[] {save, exit});

ToolBarButton控件已添加到工具栏。

  1. toolBarIcons.Images.Add(new Icon("new.ico"));
  2. toolBarIcons.Images.Add(new Icon("exit.ico"));

图标将添加到图像列表。

  1. if (e.Button.Tag.Equals("Exit"))
  2. Close();

如果按钮的标签等于"Exit",我们将关闭该应用。

Mono Winforms 中的菜单和工具栏 - 图5

图:工具栏

Winforms 教程的这一部分是关于菜单和工具栏的。