行为类似于OpenFileDialog

时间:2019-07-15 21:08:41

标签: c# openfiledialog

我正在为程序使用嵌入式数据库(SQLite),因此,当用户希望使用现有数据库条目进行工作时,他们可以使用简单的winforms UI来查看数据库中包含哪些文件,选择一个文件并继续操作。该程序。

我已经制作了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实际执行,只是跳过了选择结构,这当然会失败,因为用户没有时间输入任何内容。

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

有什么好的方法建议吗?

1 个答案:

答案 0 :(得分:1)

Form控件具有DialogResult属性,其值是从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并捕获返回值,就可以像使用其他对话框一样,在主窗体的代码中捕获结果。

主要形式:

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