一、打開文件對話框(OpenFileDialog)
1、 OpenFileDialog控件有以下基本屬性
[1]InitialDirectory:對話框的初始目錄
[2]Filter:要在對話框中顯示的文件篩選器,例如,"文本文件(*.txt)|*.txt|所有文件(*.*)||*.*"
[3]FilterIndex:在對話框中選擇的文件篩選器的索引,如果選第一項就設為1
[4]RestoreDirectory:控制對話框在關閉之前是否恢復當前目錄
[5]FileName:第一個在對話框中顯示的文件或最后一個選取的文件,路徑的返回用filename是字符串類型
[6]Title:將顯示在對話框標題欄中的字符
[7]AddExtension:是否自動添加默認擴展名
[8]CheckPathExists:在對話框返回之前,檢查指定路徑是否存在
[9]DefaultExt:默認擴展名
[10]DereferenceLinks:在從對話框返回前是否取消引用快捷方式
[11]ShowHelp:啟用"幫助按鈕"
[12]ValiDateNames:控制對話框檢查文件名中是否不含有無效的字符或序列
2、 OpenFileDialog控件有以下常用事件
[1]FileOk 當用戶點擊"打開"或"保存"按鈕時要處理的事件
[2]HelpRequest 當用戶點擊"幫助"按鈕時要處理的事件
3、可以用以下代碼來實現上面這個對話框:
private void openFileDialogBTN_Click(object sender, System.EventArgs e) { System.Windows.Forms.OpenFileDialog openFileDialog = new System.Windows.Forms.OpenFileDialog(); openFileDialog.InitialDirectory = "c:\\";//注意這里寫路徑時要用c:\\而不是c:\ openFileDialog.Filter = "文本文件|*.*|C#文件|*.cs|所有文件|*.*"; openFileDialog.RestoreDirectory = true; openFileDialog.FilterIndex = 1; DialogResult result = openFileDialog.ShowDialog(); if (result == System.Windows.Forms.DialogResult.OK) { string fName = openFileDialog.FileName; File fileOpen = new File(fName); isFileHaveName = true; txtRich.Text = fileOpen.ReadFile(); txtRich.AppendText(""); } }
二、OpenFileDialog 類的ShowDialog() 錯誤的解決
錯誤信息:在可以調用 OLE 之前,必須將當前線程設置為單線程單元(STA)模式。請確保您的 Main 函數帶有 STAThreadAttribute 標記。 只有將調試器附加到該進程才會引發此異常。
在測試程序里沒有問題,當移到多線程程序里就報以上錯誤。解決辦法就是添加單獨線程,代碼如下:
private Thread invokeThread; private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { openFileDialog1 = new OpenFileDialog(); openFileDialog1.InitialDirectory = patch; openFileDialog1.Filter = "xls files (*.xls)|*.xls"; invokeThread = new Thread(new ThreadStart(InvokeMethod)); invokeThread.SetApartmentState(ApartmentState.STA); invokeThread.Start(); invokeThread.Join(); if (result == DialogResult.OK) { if (openFileDialog1.FileName != "") { Process.Start(openFileDialog1.FileName); } } } private void InvokeMethod() { result = openFileDialog1.ShowDialog(); }
原文:https://www.cnblogs.com/xinaixia/p/4861502.html