原文: http://zetcode.com/gui/gtksharp/toolbars/

在 GTK# 编程教程的这一部分中,我们将使用工具栏。

菜单将我们可以在应用中使用的命令分组。 使用工具栏可以快速访问最常用的命令。 工具栏是带有按钮的水平或垂直面板。 这些按钮包含图像或图像和文本。 通过单击工具栏按钮,我们执行一个动作。

简单的工具栏

接下来,我们创建一个简单的工具栏。

toolbar.cs

  1. using Gtk;
  2. using System;
  3. class SharpApp : Window {
  4. public SharpApp() : base("Toolbar")
  5. {
  6. SetDefaultSize(250, 200);
  7. SetPosition(WindowPosition.Center);
  8. DeleteEvent += delegate { Application.Quit(); };
  9. Toolbar toolbar = new Toolbar();
  10. toolbar.ToolbarStyle = ToolbarStyle.Icons;
  11. ToolButton newtb = new ToolButton(Stock.New);
  12. ToolButton opentb = new ToolButton(Stock.Open);
  13. ToolButton savetb = new ToolButton(Stock.Save);
  14. SeparatorToolItem sep = new SeparatorToolItem();
  15. ToolButton quittb = new ToolButton(Stock.Quit);
  16. toolbar.Insert(newtb, 0);
  17. toolbar.Insert(opentb, 1);
  18. toolbar.Insert(savetb, 2);
  19. toolbar.Insert(sep, 3);
  20. toolbar.Insert(quittb, 4);
  21. quittb.Clicked += OnClicked;
  22. VBox vbox = new VBox(false, 2);
  23. vbox.PackStart(toolbar, false, false, 0);
  24. Add(vbox);
  25. ShowAll();
  26. }
  27. void OnClicked(object sender, EventArgs args)
  28. {
  29. Application.Quit();
  30. }
  31. public static void Main()
  32. {
  33. Application.Init();
  34. new SharpApp();
  35. Application.Run();
  36. }
  37. }

该示例显示了一个工具栏和四个工具按钮。

  1. Toolbar toolbar = new Toolbar();

Toolbar小部件已创建。

  1. toolbar.ToolbarStyle = ToolbarStyle.Icons;

在工具栏上,我们仅显示图标。 没有文字。

  1. ToolButton newtb = new ToolButton(Stock.New);

创建带有库存图像的ToolButton

  1. SeparatorToolItem sep = new SeparatorToolItem();

这是一个分隔符。 它可用于将工具栏按钮分组为逻辑组。

  1. toolbar.Insert(newtb, 0);
  2. toolbar.Insert(opentb, 1);
  3. ...

工具栏按钮插入到工具栏小部件中。

GTK# 中的工具栏 - 图1

图:工具栏

工具栏

在第二个示例中,我们显示了两个工具栏。 许多应用具有多个工具栏。 我们展示了如何在 GTK# 中做到这一点。

toolbars.cs

  1. using Gtk;
  2. using System;
  3. class SharpApp : Window {
  4. public SharpApp() : base("Toolbars")
  5. {
  6. SetDefaultSize(250, 200);
  7. SetPosition(WindowPosition.Center);
  8. DeleteEvent += delegate { Application.Quit(); };
  9. Toolbar upper = new Toolbar();
  10. upper.ToolbarStyle = ToolbarStyle.Icons;
  11. ToolButton newtb = new ToolButton(Stock.New);
  12. ToolButton opentb = new ToolButton(Stock.Open);
  13. ToolButton savetb = new ToolButton(Stock.Save);
  14. upper.Insert(newtb, 0);
  15. upper.Insert(opentb, 1);
  16. upper.Insert(savetb, 2);
  17. Toolbar lower = new Toolbar();
  18. lower.ToolbarStyle = ToolbarStyle.Icons;
  19. ToolButton quittb = new ToolButton(Stock.Quit);
  20. quittb.Clicked += OnClicked;
  21. lower.Insert(quittb, 0);
  22. VBox vbox = new VBox(false, 2);
  23. vbox.PackStart(upper, false, false, 0);
  24. vbox.PackStart(lower, false, false, 0);
  25. Add(vbox);
  26. ShowAll();
  27. }
  28. void OnClicked(object sender, EventArgs args)
  29. {
  30. Application.Quit();
  31. }
  32. public static void Main()
  33. {
  34. Application.Init();
  35. new SharpApp();
  36. Application.Run();
  37. }
  38. }

我们的应用显示了两个工具栏。

  1. Toolbar upper = new Toolbar();
  2. ...
  3. Toolbar lower = new Toolbar();

我们创建两个Toolbar小部件。

  1. upper.Insert(newtb, 0);
  2. ...
  3. lower.Insert(quittb, 0);

它们每个都有自己的工具按钮。

  1. VBox vbox = new VBox(false, 2);
  2. vbox.PackStart(upper, false, false, 0);
  3. vbox.PackStart(lower, false, false, 0)

工具栏一个接一个地包装在垂直盒中。

GTK# 中的工具栏 - 图2

图:工具栏 s

撤销重做

以下示例演示了如何停用工具栏上的工具栏按钮。 这是 GUI 编程中的常见做法。 例如,保存按钮。 如果我们将文档的所有更改都保存到磁盘上,则在大多数文本编辑器中,“保存”按钮将被禁用。 这样,应用会向用户指示所有更改都已保存。

undoredo.cs

  1. using Gtk;
  2. using System;
  3. class SharpApp : Window {
  4. private int count = 2;
  5. private ToolButton undo;
  6. private ToolButton redo;
  7. public SharpApp() : base("Undo redo")
  8. {
  9. SetDefaultSize(250, 200);
  10. SetPosition(WindowPosition.Center);
  11. DeleteEvent += delegate { Application.Quit(); };
  12. Toolbar toolbar = new Toolbar();
  13. toolbar.ToolbarStyle = ToolbarStyle.Icons;
  14. undo = new ToolButton(Stock.Undo);
  15. redo = new ToolButton(Stock.Redo);
  16. SeparatorToolItem sep = new SeparatorToolItem();
  17. ToolButton quit = new ToolButton(Stock.Quit);
  18. toolbar.Insert(undo, 0);
  19. toolbar.Insert(redo, 1);
  20. toolbar.Insert(sep, 2);
  21. toolbar.Insert(quit, 3);
  22. undo.Clicked += OnUndo;
  23. redo.Clicked += OnRedo;
  24. quit.Clicked += OnClicked;
  25. VBox vbox = new VBox(false, 2);
  26. vbox.PackStart(toolbar, false, false, 0);
  27. vbox.PackStart(new Label(), false, false, 0);
  28. Add(vbox);
  29. ShowAll();
  30. }
  31. void OnUndo(object sender, EventArgs args)
  32. {
  33. count -= 1;
  34. if (count <= 0) {
  35. undo.Sensitive = false;
  36. redo.Sensitive = true;
  37. }
  38. }
  39. void OnRedo(object sender, EventArgs args)
  40. {
  41. count += 1;
  42. if (count >= 5) {
  43. redo.Sensitive = false;
  44. undo.Sensitive = true;
  45. }
  46. }
  47. void OnClicked(object sender, EventArgs args)
  48. {
  49. Application.Quit();
  50. }
  51. public static void Main()
  52. {
  53. Application.Init();
  54. new SharpApp();
  55. Application.Run();
  56. }
  57. }

我们的示例从 GTK# 库存资源创建撤消和重做按钮。 单击几下后,每个按钮均被禁用。 按钮显示为灰色。

  1. private int count = 2;

计数变量决定哪个按钮被激活和禁用。

  1. undo = new ToolButton(Stock.Undo);
  2. redo = new ToolButton(Stock.Redo);

我们有两个工具按钮。 撤消和重做工具按钮。 图片来自库存资源。

  1. undo.Clicked += OnUndo;
  2. redo.Clicked += OnRedo;

我们为两个工具按钮都插入了Clicked事件的方法。

  1. if (count <= 0) {
  2. undo.Sensitive = false;
  3. redo.Sensitive = true;
  4. }

要激活小部件,我们将其Sensitive属性设置为 true。 要使其无效,我们将其设置为false

GTK# 中的工具栏 - 图3

图:撤销和重做

在 GTK# 编程库的这一章中,我们提到了工具栏。