• 界面组件Telerik UI for WinForms中文教程 - 如何自定义应用程序文件窗口?


    Telerik UI for WinForms包含了一个高度可定制的组件,它取代了.NET中默认的OpenFileDialog。在下一个更新版本中,会发布一个向对话框浏览器提那家自定义位置的请求功能,本文演示了这个和另一个自定义功能,它可以帮助用户在浏览文件夹时快速选择最后修改的文件,自定义将根据最近的日期/时间更改文件列表的顺序。

    Telerik UI for WinForms拥有适用Windows Forms的110多个令人惊叹的UI控件。所有的UI for WinForms控件都具有完整的主题支持,可以轻松地帮助开发人员在桌面和平板电脑应用程序提供一致美观的下一代用户体验。

    获取Telerik UI for WinForms新版下载(Q技术交流:726377843)

    本文中演示的其他自定义包括:

    • 设置自定义位置,如:
      • 文件夹应用程序路径
      • OneDrive路径
      • 下载路径
      • PC上的驱动单元
    • 更改对话框中的文本
    • 为“Open File”对话框设置特定的主题
    • 显示网格线
    • 默认恢复最后一个目录

    界面组件Telerik UI for WinForms中文教程

    实现自定义

    首先使用从RadOpenFileDialog继承的类创建一个.CS文件,添加容器组件方法,这是实现所必需的,文件应该是这样:

    1. using System.ComponentModel;
    2. using Telerik.WinControls.UI;
    3. namespace Telerik.Customized;
    4. public class MyRadOpenFileDialog : RadOpenFileDialog
    5. {
    6. public MyRadOpenFileDialog()
    7. {
    8. }
    9. public MyRadOpenFileDialog(IContainer components)
    10. {
    11. }
    12. }

    选择对您的项目有意义的命名空间和类名。

    设置自定义位置

    自定义位置允许以编程方式在导航树视图的顶部添加路径,您可以从环境变量或应用程序配置设置中配置路径。

    创建一个用这些元素初始化的位置列表:

    • 应用程序路径(在此示例中硬编码)
    • OneDrive环境变量路径
    • 从操作系统环境下载路径
    1. var places = new List<string>
    2. {
    3. "C:\\MyAppPlace",
    4. Environment.GetEnvironmentVariable("OneDrive") ?? "C:\\",
    5. Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + "\\Downloads"
    6. };

    添加ready单元驱动程序:

    1. places.AddRange(DriveInfo.GetDrives()
    2. .ToList()
    3. .Where(t => t.IsReady)
    4. .Select(drv => drv.Name));

    从OpenFileDialogForm属性中为ExplorerControl方法添加自定义位置:

    1. this.OpenFileDialogForm.ExplorerControl.AddCustomPlacesNode("My custom places",
    2. TelerikWinFormsApp1.Properties.Resources.Clipe16, places);

    您可以向标签(nodeName)添加所需的任何内容,另外添加一个表示节点的图像。

    此时,您的自定义将看起来像这样:

    界面组件Telerik UI for WinForms中文教程

    更改对话框文本

    可以用Open File中的自定义文本替换对话框窗口中的文本,通过在类初始化中添加以下文本来修复整个应用程序:

    this.OpenFileDialogForm.Text = "Open File - Default Text - Brand and My Company Name";

    您可以添加一个新属性来自定义创建的每个对话框:

    1. public string DialogText
    2. {
    3. get => OpenFileDialogForm.Text;
    4. set => OpenFileDialogForm.Text = value;
    5. }
    为文件对话框设置特定主题

    文件对话框可以使用与应用程序不同的主题,例如,如果您在应用程序中使用Fluent主题,而目标操作系统是Windows 11,则可以应用Telerik的Windows 11主题。

    1. this.OpenFileDialogForm.ExplorerControl.MainNavigationTreeView.ElementTree.EnableApplicationThemeName = false;
    2. this.OpenFileDialogForm.ExplorerControl.FileBrowserListView.ElementTree.EnableApplicationThemeName = false;
    3. this.OpenFileDialogForm.ElementTree.ThemeName = "Windows11";
    4. this.OpenFileDialogForm.ExplorerControl.MainNavigationTreeView.ElementTree.ThemeName = "Windows11";
    5. this.OpenFileDialogForm.ExplorerControl.FileBrowserListView.ElementTree.ThemeName = "Windows11";

    在使用主题之前,您必须加载它,所以在这些行之前添加这个命令:

    new Telerik.WinControls.Themes.Windows11Theme().DeserializeTheme();
    按最后修改排序文件

    要对文件进行排序,需要在加载事件中设置排序描述符。将这一行添加到类初始化中:

    1. this.OpenFileDialogForm.Load += OpenFileDialogForm_Load;
    2. this.OpenFileDialogForm.ExplorerControl.FileBrowserListView.ViewType = ListViewType.DetailsView;
    3. this.OpenFileDialogForm.ExplorerControl.FileBrowserListView.EnableSorting = true;
    4. this.OpenFileDialogForm.ExplorerControl.FileBrowserListView.EnableColumnSort = true;

    然后创建OpenFileDialogForm_Load方法,设置排序描述符。FileBrowserListView是一个RadGridView,您可以像往常一样自定义。

    1. private void OpenFileDialogForm_Load(object? sender, EventArgs e)
    2. {
    3. if (this.OpenFileDialogForm.ExplorerControl.FileBrowserListView.SortDescriptors.Count == 0)
    4. {
    5. this.OpenFileDialogForm.ExplorerControl.FileBrowserListView.EnableSorting = true;
    6. var sort = new SortDescriptor(OpenFileDialogForm.ExplorerControl.FileBrowserListView.Columns[2].Name,
    7. ListSortDirection.Descending);
    8. this.OpenFileDialogForm.ExplorerControl.FileBrowserListView.SortDescriptors.Add(sort);
    9. }
    10. this.OpenFileDialogForm.ExplorerControl.FileBrowserListView.ViewType = ListViewType.DetailsView;
    11. }
    显示网格线

    为了帮助有视觉障碍的人,请打开ShowGridLines,网格线可以是与RadGridView应用程序设计一致的选项。

    this.OpenFileDialogForm.ExplorerControl.FileBrowserListView.ShowGridLines = true;
    默认恢复最后一个目录

    在使用OpenFileDialogForm类实例时,可以打开一个默认选项来记住最后一个目录(如果创建新实例或重新启动应用程序,则不会存储最后一个目录)。通过在初始化时设置这一行来实现:

    this.RestoreDirectory = true;
    使用自定义文件对话框

    要替换现有的RadOpenFileDialog,将其替换为初始化中的自定义类名:

    1. var fileDialog = new MyRadOpenFileDialog();
    2. fileDialog.DialogText = "My Brand and My Company Name";
    3. fileDialog.Filter = "Microsoft Excel (*.xls;*.xlsx)|*.xls;*.xlsx";
    4. DialogResult dr = fileDialog.ShowDialog();
    5. if (dr == System.Windows.Forms.DialogResult.OK)
    6. {
    7. var file = fileDialog.FileName;
    8. // Do Something
    9. }
    结论

    定制是提高应用程序效率的重要方法,简化对目录中大量文件的排序,可以帮助用户只需单击Name列即可节省时间。定制标题可能会使你的产品品牌与众不同,能够在文件对话框中使用对比鲜明的主题来鼓励用户关注它。

    这些自定义的结果可能如下所示:

    界面组件Telerik UI for WinForms中文教程

    如果您想查看本文中使用的完整源代码,请查看下面的代码:

    1. using System.Collections.Generic;
    2. using System;
    3. using System.Linq;
    4. using System.ComponentModel;
    5. using System.IO;
    6. using Telerik.WinControls.Data;
    7. using Telerik.WinControls.UI;
    8. namespace Telerik.Customized;
    9. public class MyRadOpenFileDialog : RadOpenFileDialog
    10. {
    11. public MyRadOpenFileDialog()
    12. {
    13. this.OpenFileDialogForm.Load += OpenFileDialogForm_Load;
    14. var places = new List<string>
    15. {
    16. "C:\\MyAppPlace",
    17. Environment.GetEnvironmentVariable("OneDrive") ?? "C:\\",
    18. Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + "\\Downloads"
    19. };
    20. places.AddRange(DriveInfo.GetDrives()
    21. .ToList()
    22. .Where(t => t.IsReady)
    23. .Select(drv => drv.Name));
    24. this.OpenFileDialogForm.ExplorerControl.AddCustomPlacesNode("My custom places",
    25. TelerikWinFormsApp1.Properties.Resources.Clipe16, places);
    26. this.OpenFileDialogForm.Text = "Open File - Defatult Text - Brand and My Company Name";
    27. new Telerik.WinControls.Themes.Windows11Theme().DeserializeTheme();
    28. this.OpenFileDialogForm.ExplorerControl.MainNavigationTreeView.ElementTree.EnableApplicationThemeName = false;
    29. this.OpenFileDialogForm.ExplorerControl.FileBrowserListView.ElementTree.EnableApplicationThemeName = false;
    30. this.OpenFileDialogForm.ElementTree.ThemeName = "Windows11";
    31. this.OpenFileDialogForm.ExplorerControl.MainNavigationTreeView.ElementTree.ThemeName = "Windows11";
    32. this.OpenFileDialogForm.ExplorerControl.FileBrowserListView.ElementTree.ThemeName = "Windows11";
    33. this.OpenFileDialogForm.ExplorerControl.FileBrowserListView.ShowGridLines = true;
    34. this.OpenFileDialogForm.ExplorerControl.FileBrowserListView.ViewType = ListViewType.DetailsView;
    35. this.OpenFileDialogForm.ExplorerControl.FileBrowserListView.EnableSorting = true;
    36. this.OpenFileDialogForm.ExplorerControl.FileBrowserListView.EnableColumnSort = true;
    37. this.RestoreDirectory = true;
    38. }
    39. private void OpenFileDialogForm_Load(object? sender, EventArgs e)
    40. {
    41. if (this.OpenFileDialogForm.ExplorerControl.FileBrowserListView.SortDescriptors.Count == 0)
    42. {
    43. this.OpenFileDialogForm.ExplorerControl.FileBrowserListView.EnableSorting = true;
    44. var sort = new SortDescriptor(OpenFileDialogForm.ExplorerControl.FileBrowserListView.Columns[2].Name,
    45. ListSortDirection.Descending);
    46. this.OpenFileDialogForm.ExplorerControl.FileBrowserListView.SortDescriptors.Add(sort);
    47. }
    48. this.OpenFileDialogForm.ExplorerControl.FileBrowserListView.ViewType = ListViewType.DetailsView;
    49. }
    50. public string DialogText
    51. {
    52. get => OpenFileDialogForm.Text;
    53. set => OpenFileDialogForm.Text = value;
    54. }
    55. public MyRadOpenFileDialog(IContainer components)
    56. {
    57. }
    58. }

    注意:要自定义RadSaveFileDialog,您只需要将类名和OpenFileDialogForm替换为SaveFileDialogForm。

  • 相关阅读:
    倍福Ethercat模块网络诊断和硬件排查的基本方法
    Java 编程问题:二、对象、不变性和`switch`表达式
    不改平面不加层,微调走线抬电平
    ARouter 最新问题合集
    redis安装部署和常用命令
    【JavaSE】重载和重写
    【运维小知识】(一)——centos系统安装(小白入门级)
    论文初稿写到什么程度才算合格?
    爬虫基本原理
    Python教学案例 - 三天打渔、两天晒网
  • 原文地址:https://blog.csdn.net/AABBbaby/article/details/134261137