# GTK# 中的小部件 > 原文: [http://zetcode.com/gui/gtksharp/widgets/](http://zetcode.com/gui/gtksharp/widgets/) 在 GTK# 编程教程的这一部分中,我们将介绍一些 GTK# 小部件。 小部件是 GUI 应用的基本构建块。 多年来,几个小部件已成为所有 OS 平台上所有工具包中的标准。 例如,按钮,复选框或滚动条。 GTK# 工具箱的理念是将小部件的数量保持在最低水平。 将创建更多专门的小部件作为自定义 GTK# 小部件。 ## `Label` `Label`小部件显示文本。 `label.cs` ```cs using Gtk; class SharpApp : Window { string text = @"Meet you downstairs in the bar and heard your rolled up sleeves and your skull t-shirt You say why did you do it with him today? and sniff me out like I was Tanqueray cause you're my fella, my guy hand me your stella and fly by the time I'm out the door you tear men down like Roger Moore I cheated myself like I knew I would I told ya, I was trouble you know that I'm no good"; public SharpApp() : base("You know I'm No Good") { BorderWidth = 8; SetPosition(WindowPosition.Center); DeleteEvent += delegate { Application.Quit(); }; Label lyrics = new Label(text); Add(lyrics); ShowAll(); } public static void Main() { Application.Init(); new SharpApp(); Application.Run(); } } ``` 该代码示例在窗口上显示了一些歌词。 ```cs string text = @"Meet you downstairs in the bar and heard your rolled up sleeves and your skull t-shirt ... ``` 在 C# 编程语言中,多行字符串以`@`字符开头。 ```cs BorderWidth = 8; ``` `Label`周围有一些空白。 ```cs Label lyrics = new Label(text); Add(lyrics); ``` `Label`小部件已创建并添加到窗口。 ![Label Widget](img/498fc47dbb9826541f52171075796116.jpg) 图:`Label`小部件 ## `CheckButton` `CheckButton`是具有两种状态的窗口小部件:打开和关闭。 开状态通过复选标记显示。 它用来表示一些布尔属性。 `checkbutton.cs` ```cs using Gtk; using System; class SharpApp : Window { public SharpApp() : base("CheckButton") { SetDefaultSize(250, 200); SetPosition(WindowPosition.Center); DeleteEvent += delegate { Application.Quit(); }; CheckButton cb = new CheckButton("Show title"); cb.Active = true; cb.Toggled += OnToggle; Fixed fix = new Fixed(); fix.Put(cb, 50, 50); Add(fix); ShowAll(); } void OnToggle(object sender, EventArgs args) { CheckButton cb = (CheckButton) sender; if (cb.Active) { Title = "CheckButton"; } else { Title = " "; } } public static void Main() { Application.Init(); new SharpApp(); Application.Run(); } } ``` 根据`CheckButton`的状态,我们将在窗口的标题栏中显示标题。 ```cs CheckButton cb = new CheckButton("Show title"); ``` `CheckButton`小部件已创建。 ```cs cb.Active = true; ``` 默认情况下标题是可见的,因此我们默认情况下选中复选按钮。 ```cs CheckButton cb = (CheckButton) sender; ``` 在这里,我们将发送方对象转换为`CheckButton`类。 ```cs if (cb.Active) { Title = "CheckButton"; } else { Title = " "; } ``` 根据`CheckButton`的`Active`属性,我们显示或隐藏窗口的标题。 ![CheckButton](img/aa620806576bdbdddb83f48e00d16bbe.jpg) 图:`CheckButton` ## `ComboBox` `ComboBox`是一个小部件,允许用户从选项列表中进行选择。 `combobox.cs` ```cs using Gtk; using System; class SharpApp : Window { Label label; public SharpApp() : base("ComboBox") { string[] distros = new string[] {"Ubuntu", "Mandriva", "Red Hat", "Fedora", "Gentoo" }; SetDefaultSize(250, 200); SetPosition(WindowPosition.Center); BorderWidth = 7; DeleteEvent += delegate { Application.Quit(); }; Fixed fix = new Fixed(); ComboBox cb = new ComboBox(distros); cb.Changed += OnChanged; label = new Label("-"); fix.Put(cb, 50, 30); fix.Put(label, 50, 140); Add(fix); ShowAll(); } void OnChanged(object sender, EventArgs args) { ComboBox cb = (ComboBox) sender; label.Text = cb.ActiveText; } public static void Main() { Application.Init(); new SharpApp(); Application.Run(); } } ``` 该示例显示了一个组合框和一个标签。 组合框具有六个选项的列表。 这些是 Linux 发行版的名称。 标签窗口小部件显示了从组合框中选择的选项。 ```cs string[] distros = new string[] {"Ubuntu", "Mandriva", "Red Hat", "Fedora", "Gentoo" }; ``` 这是一个字符串数组,将显示在`ComboBox`小部件中。 ```cs ComboBox cb = new ComboBox(distros); ``` `ComboBox`小部件已创建。 构造函数将字符串数组作为参数。 ```cs void OnChanged(object sender, EventArgs args) { ComboBox cb = (ComboBox) sender; label.Text = cb.ActiveText; } ``` 在`OnChanged()`方法内部,我们从组合框中获取选定的文本并将其设置为标签。 ![ComboBox](img/c2fce922a2ee60e570fa5c6406221b87.jpg) 图:`ComboBox` ## `Image` 下一个示例介绍`Image`小部件。 此小部件显示图片。 `image.cs` ```cs using Gtk; using System; class SharpApp : Window { Gdk.Pixbuf castle; public SharpApp() : base("Red Rock") { BorderWidth = 1; SetPosition(WindowPosition.Center); DeleteEvent += delegate { Application.Quit(); }; try { castle = new Gdk.Pixbuf("redrock.png"); } catch { Console.WriteLine("Image not found"); Environment.Exit(1); } Image image = new Image(castle); Add(image); ShowAll(); } public static void Main() { Application.Init(); new SharpApp(); Application.Run(); } } ``` 我们在窗口中显示红色岩石城堡。 ```cs try { castle = new Gdk.Pixbuf("redrock.png"); } catch { Console.WriteLine("Image not found"); Environment.Exit(1); } ``` 我们创建`Gdk.Pixbuf`小部件。 我们将构造函数放在`try`和`catch`关键字之间,以处理可能的错误。 ```cs Image image = new Image(castle); Add(image); ``` `Image`小部件已创建并添加到窗口。 ![Image](img/28fa6d4c8e5cb3d0ae4cbf332ebe3990.jpg) 图:图像 在本章中,我们展示了 GTK# 编程库的第一组基本小部件。