2013-02-07 42 views
-1

我們的主數據庫應用程序具有爲特定工作訂單導出Excel工作簿或Access mdb的功能。這些文件然後發送給我們的分包商以填充所需的數據。我正在構建一個連接到這些文件的應用程序,並在導入到主數據庫之前顯示數據以供審閱。很簡單,對嗎?這是我的問題:應用程序打開一個OpenFileDialog框供用戶選擇將作爲會話數據源的文件。這是完美的。如果我在它之後打開一個MessageBox,那個盒子在任何其他打開的窗口後面打開。之後,他們正確迴應。我只希望使用MessageBoxes進行錯誤處理,但問題很複雜。有沒有人遇到過這個問題?C#使用OpenFileDialog之後,MessageBox不會在頂部打開

代碼中的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(); 
     } 
    } 
+1

消息框是糟糕的調試工具。另外,你可以使用'Path.GetExtension(...)'函數。 – LarsTech

+0

謝謝,我不知道Path.GetExtension()。這非常有用。我仍然想知道爲什麼MessageBox會在後臺出現。 –

回答

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

謝謝,我感謝你的幫助。實際上,我最終在菜單欄中添加了一個按鈕以供用戶點擊。查看你提供的代碼後,我還添加了一個switch語句。我最初並沒有因爲只有兩種文件類型,但我認爲它看起來更清潔。我應該注意,如果有人正在閱讀,那麼.GetExtension()返回「.xls」而不是「xls」,並使用ext.Lower()來確保案例是相同的。有時不是。 –

+0

很高興幫助。我在您的評論後修復了代碼。 –

1

雖然不建議使用提示消息框來調試你的代碼,我覺得眼前的問題是,你是在窗體的Load事件這樣做。

試試這樣說:

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

    // your code 
} 
+0

完美運作。謝謝。現在,爲了我自己的啓發,爲什麼在表單加載事件期間運行它是個問題? –

+0

@DanRicketts表單不在屏幕上,所以窗口變得混亂。這個問題在Windows 8上沒有發生,但它在我檢查過的較舊的Windows 2003機器上。 – LarsTech

+0

好的。這就說得通了。感謝您的幫助。 –

相關問題