-1

我们的主数据库应用程序具有为指定工作订单导出 Excel 工作簿或 Access mdb 的功能。然后将这些文件发送给我们的分包商以填充所需的数据。我正在构建一个应用程序,该应用程序连接到文件并在导入主数据库之前显示数据以供查看。很简单,对吧?这是我的问题:应用程序打开一个 OpenFileDialog 框供用户选择将成为会话数据源的文件。这完美无缺。如果我在它之后打开一个 MessageBox,则该框会在任何其他打开的窗口后面打开。之后,他们会正确响应。我只希望使用 MessageBoxes 进行错误处理,但问题令人困惑。有没有人遇到过这个问题?

代码中的MessageBoxes只是为了验证路径是否正确,解决这个问题;但是,这是我的代码:

    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();
        }
    }
4

2 回答 2

1

虽然不建议使用 MessageBoxes 来调试您的代码,但我认为最直接的问题是您在表单的加载事件中执行此操作。

试试这样:

protected override void OnShown(EventArgs e) {
  base.OnShown(e);

  // your code
}
于 2013-02-07T22:10:48.723 回答
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();
    }
}
于 2013-02-07T23:00:01.130 回答