我们的主数据库应用程序具有导出指定工单的Excel工作簿或Access mdb的功能。然后将这些文件发送给我们的分包商以填充所需的数据。我正在构建一个连接到文件的应用程序,并在导入主数据库之前显示要审阅的数据。很简单吧?这是我的问题:应用程序打开一个OpenFileDialog框,供用户选择将成为会话数据源的文件。这非常有效。如果我在它之后打开一个MessageBox,那个框就会打开任何其他打开的窗口。之后,他们正确回应。我只希望使用MessageBoxes进行错误处理,但问题很复杂。有人遇到过这个问题吗?
代码中的MessageBox只是为了验证路径是否正确并解决了这个问题;但是,这是我的代码:
private void SubContractedData_Load(object sender, EventArgs e)
{
string FilePath;
string ext;
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Microsoft Access Databases |*.mdb|Excel Workbooks|*.xls";
ofd.Title = "Select the data source";
ofd.InitialDirectory = ElementConfig.TransferOutPath();
if (ofd.ShowDialog() == DialogResult.OK)
{
FilePath = ofd.FileName.ToString();
ext = FilePath.Substring((FilePath.Length - 3));
if (ext == "xls")
{
MessageBox.Show(FilePath);
AccessImport(FilePath);
}
else if (ext == "mdb")
{
MessageBox.Show(FilePath);
AccessImport(FilePath);
}
}
else
{
System.Windows.Forms.Application.Exit();
}
}
答案 0 :(得分:1)
虽然不建议使用MessageBoxes来调试代码,但我认为直接的问题是你在表单的load事件中这样做。
试试这样:
protected override void OnShown(EventArgs e) {
base.OnShown(e);
// your code
}
答案 1 :(得分:0)
您的问题绝对是您在加载Form
时尝试执行此操作的事实,因为该表单尚未显示。
另一个替代方法是将此功能移出Load事件,并为用户提供推送按钮或类似内容。
换句话说:
private void SubContractedData_Load(object sender, EventArgs e)
{
// unless you're doing something else, you could remove this method
}
添加处理此功能的按钮:
private void SelectDataSourceClick(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Microsoft Access Databases |*.*|Excel Workbooks|*.xls";
ofd.Title = "Select the data source";
ofd.InitialDirectory = ElementConfig.TransferOutPath();
if (ofd.ShowDialog() == DialogResult.OK)
{
var FilePath = ofd.FileName.ToString();
var ext = Path.GetExtension(FilePath).ToLower();
switch (ext)
{
case ".xls":
MessageBox.Show(FilePath);
AccessImport(FilePath);
break;
case ".mdb":
MessageBox.Show(FilePath);
AccessImport(FilePath);
break;
default:
MessageBox.Show("Extension not recognized " + ext);
break;
}
}
else
{
System.Windows.Forms.Application.Exit();
}
}