Mono 如何将数据从Main.cs传递到MainWindow.cs?
如何将数据从Main.cs传递到MainWindow.cs?是否填充用Setic设计器创建的标签Mono 如何将数据从Main.cs传递到MainWindow.cs?,mono,gtk#,Mono,Gtk#,如何将数据从Main.cs传递到MainWindow.cs?是否填充用Setic设计器创建的标签 提前谢谢 您可以在构造函数中传递它(您不局限于生成的构造函数,只需确保使用适当的参数调用base),或者您可以在进入主循环之前在MainWindow上设置一些属性 下面是两种解决方案的示例。请注意,我总是从一个干净的Gtk项目开始,然后生成Main.cs和MainWindows.cs,并使用不同的方法更改标签文本。请注意,如果您愿意,您可能可以直接更改标签标题,但这只是一个示例:这同样可以应用于任何
提前谢谢 您可以在构造函数中传递它(您不局限于生成的构造函数,只需确保使用适当的参数调用
base
),或者您可以在进入主循环之前在MainWindow
上设置一些属性
下面是两种解决方案的示例。请注意,我总是从一个干净的Gtk项目开始,然后生成Main.cs
和MainWindows.cs
,并使用不同的方法更改标签文本。请注意,如果您愿意,您可能可以直接更改标签标题,但这只是一个示例:这同样可以应用于任何其他窗口小部件属性或窗口的一部分,它们需要的逻辑不仅仅是赋值
标签是使用stetic designer创建的,名称仅为label
方法1-更改主窗口构造函数
让我们从MonoDevelop生成的代码开始,并将窗口标题作为参数传递给构造函数。这是MonoDevelop生成的代码:
public partial class MainWindow : Gtk.Window
{
public MainWindow() : base(Gtk.WindowType.Toplevel)
{
this.Build();
}
}
这就是我们修改构造函数的方法:
public partial class MainWindow : Gtk.Window
{
public MainWindow(string labelText) : base(Gtk.WindowType.Toplevel)
{ // Note param here ^^^^^^^^^
this.Build();
// And how we use it on the following line
this.label.text = labelText;
}
}
您还应更改Main
,如下所示:
public static void Main (string[] args)
{
Application.Init();
// Note the extra parameter on next line.
var win = new MainWindow("Your label text here");
win.ShowAll();
Application.Run();
}
方法2-使用属性
这很好,因为您可以在初始化后使用它从应用程序的其他部分更改UI的某些部分。不需要更改构造函数,只要添加一个属性或方法,以防需要传递多个参数。我将从属性开始展示这两个方面:
public string LabelText {
get { return label.Text; }
set { this.label.Text = value; }
}
然后方法:
public void SetLabelText(string text)
{
this.label.Text = text;
}
请注意,我将这一点明确化,这是主窗口,但将其排除在外是安全的(也是好的)
Main
的一个示例:
public static void Main (string[] args)
{
Application.Init();
var win = new MainWindow();
win.ShowAll();
// Using the property
win.LabelText = "Your label text here";
// Or the method
win.SetLabelText("Another label text");
Application.Run();
}
如果我按照你的第二个建议在MainWindow上添加属性——如果我已经使用Setic定义了一个GTK.Label对象,MainWindow.cs上的属性会像:public partial class MainWindow:GTK.Window{public GTK.Label statusLabel=statusLabel;public MainWindow():base(GTK.WindowType.Toplevel){Build();}}
fog-您能提供两种可能解决方案的示例吗?@Cole examples添加。