访问按钮的 Gtk# (GtkSharp) 标签子项
Access Gtk# (GtkSharp) Label child of a Button
我在 MonoDevelop 中有一个 C# 项目。
长话短说,如果我在 Stetic GUI 中使用带标签的按钮,我发现我无法应用 styling/pango/markup/images。
我阅读的文档和我看到的一些代码说要制作标签或图像并将其打包到按钮中。
我为 Label 做了这个,它成功地设置了样式。
对象构建方法示例:
private void Build()
{
box = new HBox(false, 0);
box.SetSizeRequest(40, 40);
box.BorderWidth = 2;
button = new Button();
button.Clicked += cyclepoint;
lblpoints = new Label();
lblpoints.Text = "200";
lblpoints.ModifyFg(Gtk.StateType.Normal, new Gdk.Color(237, 52, 112));
button.Add(lblpoints);
button.ShowAll();
box.Add(this.button);
box.ShowAll();
this.Add(box);
}
所以没关系。现在,我正在尝试附加信号,以便每当单击按钮时,它都会更改特别单击的按钮的标签文本(因为会有多个表单。
我的信号代码:
private void cyclepoint(object sender, EventArgs args)
{
Console.WriteLine("Button Pressed!");
Console.WriteLine((Label)(((Button)sender).Child).Text);
}
构建 GUI 并单击按钮时的实际输出
Button Pressed!
GtkLabel
然而,当我尝试在下面进行更改时,MonoDevelop IDe 不会编译错误:
错误 CS1061:'Widget' 不包含 'Text' 的定义并且没有可访问的扩展方法 'Text' 接受类型 'Widget' 的第一个参数可以找到(您是否缺少 using 指令或程序集引用?)(CS1061) (shump)
所以我似乎无法访问 Gtk.Label 的 Text
属性 来更改其显示文本。执行此操作的正确方法是什么?
所以在我看来。我不相信我可以访问 Gtk.Button 对象的 "Child" 元素。
但是,我发现我可以直接从 class 中访问和编辑子 Gtk.Label 对象的 GTK.Label.Text 属性。这将自动更新标签,无需调用 Show() 函数,因此将立即反映更新以启动!此外,它还保留了我应用的 pango 样式属性。
最终目标是拥有一个程式化的倒计时类型的 Button 对象,它可以减少点击次数并实现目标。
private void cyclepoint(object sender, EventArgs args)
{
// Points is a different array that holds the increments of values
if (this.lblpoints.Text == points[10])
{
lblpoints.Text = points[0];
}
else
{
int nextval;
nextval = (Array.IndexOf(points, this.lblpoints.Text) + 1);
this.lblpoints.Text = points[nextval];
}
}
我在 MonoDevelop 中有一个 C# 项目。 长话短说,如果我在 Stetic GUI 中使用带标签的按钮,我发现我无法应用 styling/pango/markup/images。
我阅读的文档和我看到的一些代码说要制作标签或图像并将其打包到按钮中。
我为 Label 做了这个,它成功地设置了样式。
对象构建方法示例:
private void Build()
{
box = new HBox(false, 0);
box.SetSizeRequest(40, 40);
box.BorderWidth = 2;
button = new Button();
button.Clicked += cyclepoint;
lblpoints = new Label();
lblpoints.Text = "200";
lblpoints.ModifyFg(Gtk.StateType.Normal, new Gdk.Color(237, 52, 112));
button.Add(lblpoints);
button.ShowAll();
box.Add(this.button);
box.ShowAll();
this.Add(box);
}
所以没关系。现在,我正在尝试附加信号,以便每当单击按钮时,它都会更改特别单击的按钮的标签文本(因为会有多个表单。
我的信号代码:
private void cyclepoint(object sender, EventArgs args)
{
Console.WriteLine("Button Pressed!");
Console.WriteLine((Label)(((Button)sender).Child).Text);
}
构建 GUI 并单击按钮时的实际输出
Button Pressed!
GtkLabel
然而,当我尝试在下面进行更改时,MonoDevelop IDe 不会编译错误:
错误 CS1061:'Widget' 不包含 'Text' 的定义并且没有可访问的扩展方法 'Text' 接受类型 'Widget' 的第一个参数可以找到(您是否缺少 using 指令或程序集引用?)(CS1061) (shump)
所以我似乎无法访问 Gtk.Label 的 Text
属性 来更改其显示文本。执行此操作的正确方法是什么?
所以在我看来。我不相信我可以访问 Gtk.Button 对象的 "Child" 元素。
但是,我发现我可以直接从 class 中访问和编辑子 Gtk.Label 对象的 GTK.Label.Text 属性。这将自动更新标签,无需调用 Show() 函数,因此将立即反映更新以启动!此外,它还保留了我应用的 pango 样式属性。
最终目标是拥有一个程式化的倒计时类型的 Button 对象,它可以减少点击次数并实现目标。
private void cyclepoint(object sender, EventArgs args)
{
// Points is a different array that holds the increments of values
if (this.lblpoints.Text == points[10])
{
lblpoints.Text = points[0];
}
else
{
int nextval;
nextval = (Array.IndexOf(points, this.lblpoints.Text) + 1);
this.lblpoints.Text = points[nextval];
}
}