C# 之 OpenFileDialog的使用


一、打開文件對話框(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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM