行为类似于 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");
}
}
}
我的程序使用的是嵌入式数据库 (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");
}
}
}