GTK# 中的工具栏
最后修改于 2023 年 10 月 18 日
在本 GTK# 编程教程中,我们将学习工具栏。
菜单组织了我们可以在应用程序中使用的命令。工具栏提供对最常用命令的快速访问。工具栏是一个带有按钮的水平或垂直面板。这些按钮有图像或图像和文本。通过单击工具栏按钮,我们可以执行一个操作。
简单工具栏
接下来,我们创建一个简单的工具栏。
toolbar.cs
using Gtk; using System; class SharpApp : Window { public SharpApp() : base("Toolbar") { SetDefaultSize(250, 200); SetPosition(WindowPosition.Center); DeleteEvent += delegate { Application.Quit(); }; Toolbar toolbar = new Toolbar(); toolbar.ToolbarStyle = ToolbarStyle.Icons; ToolButton newtb = new ToolButton(Stock.New); ToolButton opentb = new ToolButton(Stock.Open); ToolButton savetb = new ToolButton(Stock.Save); SeparatorToolItem sep = new SeparatorToolItem(); ToolButton quittb = new ToolButton(Stock.Quit); toolbar.Insert(newtb, 0); toolbar.Insert(opentb, 1); toolbar.Insert(savetb, 2); toolbar.Insert(sep, 3); toolbar.Insert(quittb, 4); quittb.Clicked += OnClicked; VBox vbox = new VBox(false, 2); vbox.PackStart(toolbar, false, false, 0); Add(vbox); ShowAll(); } void OnClicked(object sender, EventArgs args) { Application.Quit(); } public static void Main() { Application.Init(); new SharpApp(); Application.Run(); } }
该示例显示了一个工具栏和四个工具按钮。
Toolbar toolbar = new Toolbar();
创建了一个 Toolbar
控件。
toolbar.ToolbarStyle = ToolbarStyle.Icons;
在工具栏上,我们只显示图标。没有文本。
ToolButton newtb = new ToolButton(Stock.New);
创建一个带有来自 stock 的图像的 ToolButton
。
SeparatorToolItem sep = new SeparatorToolItem();
这是一个分隔符。它可用于将工具栏按钮分组到逻辑组中。
toolbar.Insert(newtb, 0); toolbar.Insert(opentb, 1); ...
工具栏按钮被插入到工具栏控件中。

工具栏
在第二个示例中,我们展示了两个工具栏。许多应用程序都有多个工具栏。我们展示了如何在 GTK# 中实现它。
toolbars.cs
using Gtk; using System; class SharpApp : Window { public SharpApp() : base("Toolbars") { SetDefaultSize(250, 200); SetPosition(WindowPosition.Center); DeleteEvent += delegate { Application.Quit(); }; Toolbar upper = new Toolbar(); upper.ToolbarStyle = ToolbarStyle.Icons; ToolButton newtb = new ToolButton(Stock.New); ToolButton opentb = new ToolButton(Stock.Open); ToolButton savetb = new ToolButton(Stock.Save); upper.Insert(newtb, 0); upper.Insert(opentb, 1); upper.Insert(savetb, 2); Toolbar lower = new Toolbar(); lower.ToolbarStyle = ToolbarStyle.Icons; ToolButton quittb = new ToolButton(Stock.Quit); quittb.Clicked += OnClicked; lower.Insert(quittb, 0); VBox vbox = new VBox(false, 2); vbox.PackStart(upper, false, false, 0); vbox.PackStart(lower, false, false, 0); Add(vbox); ShowAll(); } void OnClicked(object sender, EventArgs args) { Application.Quit(); } public static void Main() { Application.Init(); new SharpApp(); Application.Run(); } }
我们的应用程序显示了两个工具栏。
Toolbar upper = new Toolbar(); ... Toolbar lower = new Toolbar();
我们创建了两个 Toolbar
控件。
upper.Insert(newtb, 0); ... lower.Insert(quittb, 0);
它们中的每一个都有自己的工具按钮。
VBox vbox = new VBox(false, 2); vbox.PackStart(upper, false, false, 0); vbox.PackStart(lower, false, false, 0)
工具栏一个接一个地被打包到垂直框中。

撤销重做
以下示例演示了如何在工具栏上禁用工具栏按钮。这在 GUI 编程中很常见。例如,保存按钮。如果我们将文档的所有更改保存到磁盘,则在大多数文本编辑器中,保存按钮将被禁用。通过这种方式,应用程序向用户表明所有更改都已保存。
undoredo.cs
using Gtk; using System; class SharpApp : Window { private int count = 2; private ToolButton undo; private ToolButton redo; public SharpApp() : base("Undo redo") { SetDefaultSize(250, 200); SetPosition(WindowPosition.Center); DeleteEvent += delegate { Application.Quit(); }; Toolbar toolbar = new Toolbar(); toolbar.ToolbarStyle = ToolbarStyle.Icons; undo = new ToolButton(Stock.Undo); redo = new ToolButton(Stock.Redo); SeparatorToolItem sep = new SeparatorToolItem(); ToolButton quit = new ToolButton(Stock.Quit); toolbar.Insert(undo, 0); toolbar.Insert(redo, 1); toolbar.Insert(sep, 2); toolbar.Insert(quit, 3); undo.Clicked += OnUndo; redo.Clicked += OnRedo; quit.Clicked += OnClicked; VBox vbox = new VBox(false, 2); vbox.PackStart(toolbar, false, false, 0); vbox.PackStart(new Label(), false, false, 0); Add(vbox); ShowAll(); } void OnUndo(object sender, EventArgs args) { count -= 1; if (count <= 0) { undo.Sensitive = false; redo.Sensitive = true; } } void OnRedo(object sender, EventArgs args) { count += 1; if (count >= 5) { redo.Sensitive = false; undo.Sensitive = true; } } void OnClicked(object sender, EventArgs args) { Application.Quit(); } public static void Main() { Application.Init(); new SharpApp(); Application.Run(); } }
我们的示例从 GTK# stock 资源中创建撤销和重做按钮。在几次点击后,每个按钮都会被禁用。按钮变为灰色。
private int count = 2;
count 变量决定哪个按钮被激活和禁用。
undo = new ToolButton(Stock.Undo); redo = new ToolButton(Stock.Redo);
我们有两个工具按钮。撤销和重做工具按钮。图像来自 stock 资源。
undo.Clicked += OnUndo; redo.Clicked += OnRedo;
我们为这两个工具按钮的 Clicked
事件插入一个方法。
if (count <= 0) { undo.Sensitive = false; redo.Sensitive = true; }
要激活一个控件,我们将它的 Sensitive
属性设置为 true。要禁用它,我们将其设置为 false。

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