等待用户控制中的输入

时间:2018-12-07 08:35:12

标签: c# winforms

我正在尝试在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();
        }

}

这是我在提示对象处的代码:

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_close_Click()中的下一行。

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

1 个答案:

答案 0 :(得分:1)

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

在您的用户控件中:

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);
}

处理表单上的事件:

public void prompt1_ExitApplication(object sender, EventArgs e)
{
    Application.Exit();
}

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