我在应用程序中创建了一个用户控件,该用户控件具有文本框,然后在其中有2个按钮。一个按钮是从文本框中添加数据,第二个按钮取消动作。然后将此用户控件添加到多个对话框(表单)中,但我希望按钮触发相同的事件,这是我将按钮放在用户控件上而不是对话框上的原因。

我要做的是在他们单击“添加数据”按钮并成功之后,我希望它关闭控件所在的对话框。

编辑:

我不知道如何在用户控件触发对话框时进行编码以关闭对话框。我不知道从哪里开始,因为我以前从未使用过用户控件。通常,我只有对话框上的控件,该控件允许 DialogResult = DialogResult.OK;

谢谢

有帮助吗?

解决方案

设置了拨号符时,将单程打开的表单将自动关闭。从它的声音中,您正在设置控件的拨号,而不是表单。要做您正在尝试做的事情,您需要控件来设置或触发父式对话框结果的设置。您可以通过两者来执行此操作:

1. 通过对控件的表单的引用,从而允许控件设置它。

2. 在表单倾听的控件上创建一个事件,该事件告诉其关闭。 (推荐的方式)

3. (骇人听闻的方式) 使用此代码设置表单对话框结果:

this.ParentForm.DialogResult = DialogResult.OK;

该表单还需要模仿显示,否则您需要手动调用Close()方法。

其他提示

您将需要使用代表解决此问题。

在您控件背后的代码中,定义一个代表,您将使用该代表来告诉主表单以关闭自身。无论您在控制何处,您都想关闭父母表格,您都会提出此自定义事件,该事件将由您的父母表格处理。举例来说,我们假设您要在控件中单击按钮上关闭父表格

public delegate void CloseHostFormEventHandler(Object sender, EventArgs e);

public partial class MyControl : Control {

    public event CloseHostFormEventHandler CloseFormEvent;


    public closeButton_Clicked(object sender, EventArgs) {
        // do your db stuff

        // you could create your own class here and pass the object to your main form if you wanted
        EventArgs myargs = new EventArgs(); 

        // tell host form to close itself
        CloseFormEvent(this, myargs);

    }
}

现在,以您的父级表格,您将需要处理由控件提出的事件。

public partial class MyForm : Form {

    public MyForm() {

        InitializeComponent();

        // ill assume your control was added via the designer and thus done in InitializeComponent()

        // hook up event handler
        mycontrol.CloseFormEvent += CloseFormEventHandler(closeformCallback);
    }

    protected void closeformCallback(object sender, EventArgs e) {
        DialogResult = DialogResult.OK;
        this.Close();
    }


}

由于您没有提供太多信息,因此我会做一个疯狂的猜测。

对话框没有关闭,因为它不是模态对话框。尝试显示 ShowDialog() 而不是 Show().

正如托尼所说。您需要调用关闭方法。

您可以做的是将对呼叫的引用从您的控件中进行,并从那里调用其关闭方法。

您可以将单击事件处理程序放在您的用户控制上:

        Form f = this.ParentForm;
        if (f != null)
        {
            f.DialogResult = DialogResult.OK;
        }

Dialogresult不会关闭 非模式 形式。

您需要调用表单的关闭方法或在这种情况下对话框。

编辑

或使用showdialog()而不是show()。

再次编辑

根据 Dialogresult文档:

当将表单显示为模态对话框时,单击“闭合”按钮(表单的顶角中的X上的按钮)会导致表单被隐藏,并将Dialogresult属性设置为dialogresult.cancel。当用户单击对话框的关闭按钮或设置Dialogresult属性的值时,关闭方法不会自动调用。取而代之的是,该表单是隐藏的,并且可以再次显示,而无需创建对话框的新实例。由于这种行为,当您的应用程序不再需要表单时,您必须调用表单的处置方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top