C# 等待用户控件中的输入

C# 等待用户控件中的输入,c#,winforms,C#,Winforms,我正在尝试在WinForms中实现自定义的退出提示。我不应该使用DialogBox 我在主窗体中放置了一个用户控件对象,该对象在默认情况下是不可见和禁用的。单击我在表单上放置的某个按钮,将显示并启用该对象,禁用表单中除用户控件之外的所有内容 private void btn_close_Click(object sender, EventArgs e) { prompt1.Visible = true; prompt1.Enabled = true;

我正在尝试在WinForms中实现自定义的退出提示。我不应该使用DialogBox

我在主窗体中放置了一个用户控件对象,该对象在默认情况下是不可见和禁用的。单击我在表单上放置的某个按钮,将显示并启用该对象,禁用表单中除用户控件之外的所有内容

private void btn_close_Click(object sender, EventArgs e) {
        prompt1.Visible = true;
        prompt1.Enabled = true;
        disableControls();

        //Wait for a button to be pressed in prompt1
        //Make an action based on a button pressed.
        //closeApp returns a boolean

        if (!prompt1.closeApp)
        {
            prompt1.Visible = false;
            prompt1.Enabled = false;
            enableControls();
        }
        else
        {
            Application.Exit();
        }

}
以下是我在prompt对象中的代码:

public partial class Prompt : UserControl
{
    bool exit;

    public bool closeApp
    {
        get{return exit;}
    }

    public Prompt()
    {
        InitializeComponent();
    }

    private void btn_yes_Click(object sender, EventArgs e)
    {
        exit = true;
    }

    private void btn_no_Click(object sender, EventArgs e)
    {
        exit = false;
        this.Hide();
    }
}
我想做的是等待在我的提示对象中按下一个按钮,然后继续btn\u close\u单击中的下一行


我该怎么办?有没有更好的方法来实现这一点?

将事件添加到用户控件,然后在主窗体上处理这些事件

在用户控件中:

public event EventHandler<EventArgs> ExitCancelled;
public event EventHandler<EventArgs> ExitApplication;

private void btn_yes_Click(object sender, EventArgs e)
{
    ExitApplication?.Invoke(this, EventArgs.Empty);
}

private void btn_no_Click(object sender, EventArgs e)
{
    ExitCancelled?.Invoke(this, EventArgs.Empty);
}

你为什么不使用另一个窗体而不是使用隐藏控件呢?我试着制作一个窗体,但也很难使该窗体与我的主窗体通信。我可以做到,但它不会在主窗体中禁用我的组件。你可以很容易地使用MessageBox。或者,如果需要自定义对话框,请使用ShowDialog显示表单。对于每个按钮,可以将对话框结果设置为是、否、确定、取消。您可以检查ShowDialog的结果。您应该使用form.ShowDialog将窗体显示为对话框。这将禁用主窗体上的控件,直到关闭第二个窗体
public void prompt1_ExitApplication(object sender, EventArgs e)
{
    Application.Exit();
}

public void prompt1_ExitCancelled(object sender, EventArgs e)
{
    prompt1.Hide();
    enablecontrols();
}