Dialog返回对象作为响应

本文关键字:响应 对象 返回 Dialog | 更新日期: 2023-09-27 18:28:50

我正试图用mono Gtk#编写一个简单的表单应用程序,但一开始就陷入了困境。我创建了一个从Gtk.Dialog继承的Dialog表单。用于收集基本信息并将这些信息作为对象返回到主窗口或向主窗口触发一些事件的对话框表单,这样它就可以执行它在这种情况下应该执行的操作,将数据绑定到TreeView控件(这是另一回事)。到目前为止,这些都是我尝试过的;

对话框代码

public partial class MyDialog : Gtk.Dialog
{
    public MyDialog ()
    {
        this.Build ();
    }
    protected void OnButtonOkClicked (object sender, EventArgs e)
    {
        int portNumber = 0;
        iint.TryParse (spnPort.Text, out portNumber);
        var myObj = new MyObj ();
        myObj.Username = txtUsername.Text;
        myObj.Password = txtPassport.Text;
        // did not work as ParentWindow is a Gdk.Window
        //(this.ParentWindow as MainWindow).AddObj(myObj);
        //Also did not work because there is no response related method 
        //or property in the Dialog please read below code block this will make more sense
        //this.OnResponse(myObj);
    }

}

调用拨号的主窗口代码

protected void OnAddActionActivated (object sender, EventArgs e)
{
    MyDialog s = new MyDialog();
    s.Run();
    s.Response += HandleResponse;
}
void HandleResponse (object o, ResponseArgs args)
{
    //as this event has args.Args and args.RetVal I thought one would do what I wanted 
    //maybe I am using them all wrong
}   

如果有人能解释什么是Gdk.Window以及它在Gtk控制下做了什么,我将不胜感激。

Dialog返回对象作为响应

只需将要返回的对象存储在对话框对象中,并使用属性提供对它的访问。不要忘记通过检查Run()的返回值来检查用户是否按下了取消按钮(如果你有)。

有关示例,请参阅官方文档中股票FileChooserDialog的示例代码。