• 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(); }
  • 相关阅读:
    break和continue
    while循环嵌套
    while循环语句
    SDUT 2766-小明传奇2(母函数)
    那些奇妙的"大师"是怎样炼成的(科学、迷信、心理)
    深入理解Linux字符设备驱动
    [从头学数学] 第162节 锐角三角函数
    iOS将数组中的内容分拼接成字符串
    win10 UWP 全屏
    杂(三)-The type java.lang.Object cannot be resolved It is indirectly referenced ...
  • 原文地址:https://www.cnblogs.com/xinaixia/p/4861502.html
Copyright © 2020-2023  润新知