我正在为程序使用嵌入式数据库(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类,并使它的行为符合我的喜好,但这似乎很复杂。
有什么好的方法建议吗?
答案 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");
}
}
}