Mono 如何将数据从Main.cs传递到MainWindow.cs?

Mono 如何将数据从Main.cs传递到MainWindow.cs?,mono,gtk#,Mono,Gtk#,如何将数据从Main.cs传递到MainWindow.cs?是否填充用Setic设计器创建的标签 提前谢谢 您可以在构造函数中传递它(您不局限于生成的构造函数,只需确保使用适当的参数调用base),或者您可以在进入主循环之前在MainWindow上设置一些属性 下面是两种解决方案的示例。请注意,我总是从一个干净的Gtk项目开始,然后生成Main.cs和MainWindows.cs,并使用不同的方法更改标签文本。请注意,如果您愿意,您可能可以直接更改标签标题,但这只是一个示例:这同样可以应用于任何

如何将数据从Main.cs传递到MainWindow.cs?是否填充用Setic设计器创建的标签


提前谢谢

您可以在构造函数中传递它(您不局限于生成的构造函数,只需确保使用适当的参数调用
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添加。