行为类似于 OpenFileDialog 的 OpenDatabaseForm

OpenDatabaseForm that behaves like OpenFileDialog

我的程序使用的是嵌入式数据库 (SQLite),因此当用户想要使用现有数据库条目时,他们可以使用简单的 winforms UI 查看数据库中有哪些文件,select一并继续节目

我已经制作了 UI,但需要该表单表现出类似于 OpenFileDialog w.r.t 的行为。以下:

if(openFileDialog.ShowDialog() == DialogResult.OK)
      file = openFileDialog.FileName;

所以它应该看起来像下面这样:

OpenDatabaseDialog odd = new OpenDatabaseDialog();
odd.Show();
if(odd.IsOK)
      file = odd.FileName;

我已经尝试在我的 OpenDatabaseDialog 中公开一些属性,IsOk(如果表单成功从用户那里获得文件名,则为 true 的布尔值)和 FileName(一个应该包含实际文件名字符串的字符串)。

问题是,程序没有等待 OpenDatabaseDialog 实际执行,它只是跳过 selection 结构,这当然会失败,因为用户没有时间输入任何内容。

我想到的另一种方法是扩展 OpenFileDialog class 并使其行为符合我的喜好,但这似乎非常复杂。

关于执行此操作的好方法有什么建议吗?

Form 控件有一个 DialogResult 属性,其值是 return 从 ShowDialog 方法编辑而来的。因此,您所要做的就是在对话框表单中添加一个 Ok 按钮,并添加代码以在该按钮后面设置 DialogResult(并关闭表单)。

例如:

public partial class OpenDatabaseDialog : Form
{
    public OpenDatabaseDialog()
    {
        InitializeComponent();
    }

    private void btnOk_Click(object sender, EventArgs e)
    {
        // Set any properties necessary that indicate the user's selections

        // User clicked 'Ok' so set our result (which will also close the form)
        this.DialogResult = DialogResult.OK;
    }
}

然后,在您的主窗体代码中,您可以通过调用 ShowDialog 并捕获 return 值来像捕获任何其他对话框一样捕获结果。

主窗体:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        var openDbDialog = new OpenDatabaseDialog();

        // Show the form as a dialog and capture the result
        if (openDbDialog.ShowDialog() == DialogResult.OK)
        {
            MessageBox.Show("You clicked 'Ok' to close the dialog");
        }
        else
        {
            MessageBox.Show("You closed the dialog some other way");
        }
    }
}