如何使自定义控件的属性打开文件对话框?

2023-11-30

我有一个自定义控件,其属性保存目标计算机上存在的文件位置的名称(完整路径)。

确切的路径会根据目标电脑的类型而有所不同,并且通常在我将自定义控件添加到表单后立即设置,同时我仍处于项目的设计模式,以便当我的应用程序运行时,它会从以下位置获取文件名该财产。

如果该属性打开一个文件对话框让我浏览到该位置(类似于浏览图像和颜色属性时打开对话框的方式),那会很方便,但这在 Visual Basic 中似乎不可能。

经过几天的谷歌搜索,我发现了几篇涉及其他编程语言主题的文章(请参阅下面的示例片段),但我无法弄清楚如何使其适用于 Visual Basic。

这是我发现的一个片段,其中提到了编辑器的使用,这可能是入门的线索。

[Editor(typeof(FileSelectorTypeEditor), typeof(UITypeEditor))]
public string Filename
{
   get { return _filename; }
   set { _filename = value; }
}

希望有人能以正确的方式引导我。


FileSelectorTypeEditor可能是派生自任一自定义类文件名编辑器 or 文件夹名称编辑器.

您可以使用标准类来实现这两者,也可以使用您自己的类扩展默认值,正如您在找到的那些 C# 源代码中所看到的那样。

这里我用的是专门的FileNameEditor类,命名(有点缺乏想象力)SpecializedFileNameEditor和标准FolderNameEditor分配UITypeEditor一个类的两个属性。

► The ImagePath属性编辑器是SpecializedFileNameEditor对象,它使用 OpenFileDialog,其中预先选择了过滤器。它还会覆盖EditValue方法,设置关联属性的当前值(如果有)(此处,ImagePath) 作为 OpenFileDialog 的 InitialDirectory。
► The ImageFolder属性编辑器是一个标准FolderNameEditor,这将打开一个FolderBrowserDialog。

我还附上一个可扩展对象转换器类型转换器,因此您可以将这两个属性呈现为 PropertyGrid 中的可扩展属性选择器。

您可以在此处查看示例:
如何将用户控件的子控件绑定到公共属性

Imports System.ComponentModel
Imports System.Drawing.Design
Imports System.IO
Imports System.Windows.Forms
Imports System.Windows.Forms.Design

<TypeConverter(GetType(ExpandableObjectConverter))>
Public Class ImagePickerClass

    Public Sub New()  
        ' Initialize [...]
    End Sub

    <Editor(GetType(SpecializedFileNameEditor), GetType(UITypeEditor))>
    Public Property ImagePath As String

    <Editor(GetType(FolderNameEditor), GetType(UITypeEditor))>
    Public Property ImageFolder As String

    Public Class SpecializedFileNameEditor
        Inherits FileNameEditor

        Private currentValue As String = String.Empty

        Public Overrides Function EditValue(context As ITypeDescriptorContext, provider As IServiceProvider, value As Object) As Object
            If TypeOf value Is String Then
                currentValue = DirectCast(value, String)
            End If
            Return MyBase.EditValue(context, provider, value)
        End Function

        Protected Overrides Sub InitializeDialog(ofd As OpenFileDialog)
            MyBase.InitializeDialog(ofd)
            If Not currentValue.Equals(String.Empty) Then
                ofd.InitialDirectory = Path.GetDirectoryName(currentValue)
            End If
            ofd.Filter = "PNG Images (*.png)|*.png"
        End Sub
    End Class
End Class
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使自定义控件的属性打开文件对话框? 的相关文章

  • 过滤数据网格视图

    我在互联网上搜索了我的问题的解决方案 我和我的 Studygrp 正在制作一个从类库中获取信息的数据网格视图 所有这些都有效 但现在我们必须过滤它 但我所能找到的只是通过绑定源 但这不是我的想法 我只想要一个简单的过滤器 以便您可以在文本框
  • 如何在没有临时文件的情况下将文件从 Windows 窗体(listView)拖放到桌面(任何资源管理器窗口)

    我知道这通常是用临时文件实现的 但这在这里不起作用 因为我们正在处理存储在数据库中的相当大的文件 到目前为止 我的想法是创建一个具有唯一名称的小型临时文件 并执行 FileSystemWatcher 监视放置以获取路径 但这似乎不是最佳选择
  • 如何在WebBrowser控件中注入Javascript?

    我试过这个 string newScript textBox1 Text HtmlElement head browserCtrl Document GetElementsByTagName head 0 HtmlElement scrip
  • Gridview rowdatabound访问数据项vb

    我正在尝试将 ImageUrl 指向 GridView 中模板字段中的图像 但不断收到错误 你调用的对象是空的 在这一行 Dim imagePath As String rowView image path 我以前从未在 GridView
  • 关闭框触发非模态表单验证

    我有两个继承自共同基础的表单类 其中一种形式称为模态形式 另一种形式称为非模态形式 焦点更改时需要验证 但表单取消时则不需要验证 当在模态表单上选择 关闭框 时 它会正确关闭 而不会在其控件上触发任何验证 当在非模态表单上选择关闭框时 将触
  • 如何在 winforms 应用程序的主屏幕显示之前显示欢迎屏幕?

    我想在应用程序启动时加载欢迎屏幕 然后用户单击欢迎屏幕上的按钮 然后关闭欢迎屏幕 最后显示主屏幕 static void Main startup method being called Application EnableVisualSt
  • 禁用按钮上的实际文本颜色

    VB2012 我正在创建一个按钮控件并继承自 NET 按钮 从这里夺取基地https blogs msdn microsoft com jfoscoding 2005 11 10 building a splitbutton https b
  • 循环内声明的变量在循环的每次迭代中保持值

    我无法确定这是一个错误还是一个功能 For i 0 To 4 Dim strTest As String If i 0 Then strTest test value End If Console WriteLine strTest Nex
  • 如何更改ComboBox所选项目的前景色?

    是否可以更改所选 不在下拉列表中 项目的外观 combobox ForeColor 仅更改下拉列表中所有项目的文本颜色 Edit 变体如下 我们的是 public static void CBoxDrawItem object sender
  • 如何捕获 Ctrl + Alt + RShftKey

    For some time I m trying to catch Ctrl Alt Right Shift Key under common VBNET key handler Here are my tests If e Control
  • Expression Blend 设计时特定的视觉效果是否可能?

    我正在尝试在 Blend 3 中设计一些 UserControl 类 我希望它们的一部分在运行时创建时 折叠 但我希望能够编辑它们的组成部分 而无需每次构建时都修改代码 它适用于示例数据源 如以下示例所示 但它似乎不适用于其他属性 或者我做
  • 读取 .ini 文件 vb.net?

    我有一个具有读取 ini 文件功能的项目 我无法显示我想要的 ini 文件的内容 我的代码读取 ini 文件 Public Function GetSettingItem ByVal File As String ByVal Identif
  • 同时激活表单和处理按钮?

    我在 C 中使用 Windows 窗体 我有一个主窗体 其中有几个包含 toolStripButtons 的工具栏 使用包含数据的另一个窗体后 主窗体失去焦点 并且单击 toolStripButton 不会触发 OnClick 事件 第一次
  • 终止以 System.Diagnostic.Process.Start("FileName") 启动的进程

    我正在尝试创建一个将在特定时间执行操作的应用程序 很像 Windows 任务计划程序 我当前正在使用 Process Start 来启动任务所需的文件 或 exe 我通过调用文件 mp3 启动一个进程 该进程启动 WMP 因为它是默认应用程
  • 需要帮助将 winform 迁移到 net 5

    我正在将 winform 应用程序从 net core 3 1 移植到 net 5 并收到以下错误 严重性代码 说明 项目文件行抑制状态 错误NETSDK1136 目标平台必须设置为Windows 通常 通过在 TargetFramewor
  • VB.NET 将 Select Case 语句堆叠在一起,就像在 Switch C#/Java 中一样

    看来如果我把箱子堆在一起 它们就不能作为一个整体使用 由于 VB NET 案例不需要使用Exit Select return 好像每次检测到一个新的Case都会自动放到它下面 Dim Test as Integer 12 Select Ca
  • Windows 窗体 PictureBox.Image 为空,即使窗体中显示图像

    我正在尝试捕获此设备扫描的指纹 gt http www nitgen com eng product finkey html http www nitgen com eng product finkey html 我能够成功扫描指纹并保存二
  • 无法从另一个类中调用静态方法

    我有一个类文件 其中包含一个对输入字符串进行哈希处理的函数 using System using System Security Cryptography using System Linq using System Text using
  • WPF - 按多列排序时使用自定义比较器

    我有一个 ListView GridView 我想按 2 列排序 因此如果第 1 列中有 2 个以上的项目具有相同的值 它将按第 2 列排序 非常简单 但是在对 A Z 进行排序时 空字符串会出现在顶部 我想把它们移到底部 我制作了一个比较
  • WPF DataGrid 绑定到 string.Length 而不是字符串文本

    我是 WPF 的新手 并且真诚地尝试自己尽可能多地弄清楚 我已经创建了第一个 DataGrid 控件 并且尝试使用如下字符串列表填充它

随机推荐

  • Unicode 命名的文件夹显示?在 wscript 提示符下

    我遇到 Unicode 命名文件夹的问题 当我将文件夹拖到脚本中时 它没有正确显示文件夹的路径 简单的 VBScript 这只是其中的一部分 Dim Wshso Set Wshso WScript CreateObject WScript
  • Python argparse:强制列表项唯一

    能够使用以下方式验证列表项choices servers下面很好 servers ApaServer BananServer GulServer SolServer RymdServer SkeppServer HavsServer Sov
  • Android 从顶部滑动抽屉?

    有什么办法可以让抽屉从上滑到下吗 我找到了一个简单的方法来做到这一点 您所要做的就是为slidingDrawer 内容和手柄设置180 的旋转 通过一个例子更容易理解 所以看看我做了什么 首先 我将向您展示我的旧 SlidingDrawer
  • 将可可粒放入可可中

    如何将笔尖加载到另一个窗口内 我尝试了 initWithWindowName if mmController NULL mmController mainMenu alloc initWithWindowNibName mainMenu m
  • 在 CasperJS 的表单之外使用选择

    我想选择一个条目进入选择 我如何使用 CasperJS 做到这一点 您需要了解的一些信息 我无法修改页面 我的任务只是编写测试 选择标记不包含在表单中 我无法使用document querySelector MY SELECT select
  • Angular 2 节点波本错误

    ERROR in node modules css loader sourceMap false importLoaders 1 node modules postcss loader lib ident postcss sourceMap
  • 去掉标签,但保留第一个

    例如我怎样才能保留第一个img标记但剥离所有其他的 来自 HTML 字符串 example p some text img src aimage jpg alt desc width 320 height 200 img src aimag
  • iPhone 上的 Lua

    我正在尝试在 iPhone 上运行时加载 Lua 脚本 有可能这样做吗 我该如何开始使用 Lua 我找不到东西 我唯一能找到的是这应该是可能的 但我想知道如何实现 查看科罗娜SDK
  • 熊猫留在原地

    我有一个大数据框df和一个小数据框df right有 2 列a and b 我想做一个简单的左连接 查找a无需复制df 我想出了这段代码 但我不确定它有多强大 dtmp pd merge df a df right on a how lef
  • SKSpriteNode 框架偏离

    我正在尝试从 UIBezierPath 创建一个开放圆 并将其转换为 SKShapeNode 稍后将其转换为 SKSpriteNode 我遇到了一个问题 我不知道如何缩小精灵 而它的线宽没有缩小 您可以在这里查看解决方案 调整精灵大小而不缩
  • C#,Gmap.net:使用 Gmap.net 库在谷歌地图上绘制 5 个标记时生成异常

    我正在使用 Gmap net 库在谷歌地图上的三角测量算法进行计算后在特定的时间绘制标记 当我为两个标记工作时 它工作正常 但当我尝试绘制 5 个标记时 它向我显示异常 System InvalidOperationException 类型
  • Python使用key和lambda进行排序,lambda有什么作用?

    所以我有一个值列表 如下所示 values date 2015 04 15T11 15 34 val 30 val 90 date 2015 04 19T11 15 34 val 25 date 2015 04 16T11 15 34 我用
  • Pandas 循环访问数据帧列表和更改索引

    这是一个基本问题 但我想循环遍历数据帧列表 并对于每个数据帧 将索引设置为数据帧中的列之一 下面代码的问题是它没有使用新索引保存数据框 如何格式化此 For 循环 以便数据帧在 for 循环之外永久更改 谢谢 dflist df 1 df
  • Xamarin Studio 中的 java Lang UnsupportedClassVersion 错误

    当我构建项目时 出现以下错误 我该如何纠正这个问题 C Program Files x86 MSBuild Xamarin Android Xamarin Android Common targets 3 3 错误 java lang Un
  • Windows Phone 8 中的地图点击事件/鼠标按下事件?

    我正在使用 Windows Phone 模拟器 我写了一个非常简单的程序 当用户点击地图一次时在地图上绘制一个标记 然后我使用map tap事件 并获取点击的位置 如下所示 private void map Tap object sende
  • 4.1 中的 java.lang.NoClassDefFoundError 和使用 5.1.在 android studio 中使用 multidex

    三天以来我陷入了一个非常愚蠢的问题 但仍然没有运气 我使用 Parse com 进行注册和登录 我还使用 Twitter 和 Facebook 我的应用程序类 oncreate 方法 public void onCreate super o
  • MongoDB - 聚合和

    我正在尝试计算我们数据库中跟踪的总花费金额 每个订单文档包含一个字段 total price 我正在尝试使用以下代码 db orders aggregate group id null total sum total price 不幸的是
  • 角度变量生成html

    我正在尝试使用 angularJS 制作一个博客页面 在消息部分我有一个像这样的 div div class post content jsonPost message div 在变量 jsonPost message 中我得到了一个像这样
  • Mac OS X 10.9之后无法安装PIL

    我刚刚将我的 Mac 操作系统更新到 10 9 我发现我的一些 全部 Python 模块不再存在 尤其是 Image 模块 所以我尝试执行sudo pip install pil 但我收到此错误 Applications Xcode app
  • 如何使自定义控件的属性打开文件对话框?

    我有一个自定义控件 其属性保存目标计算机上存在的文件位置的名称 完整路径 确切的路径会根据目标电脑的类型而有所不同 并且通常在我将自定义控件添加到表单后立即设置 同时我仍处于项目的设计模式 以便当我的应用程序运行时 它会从以下位置获取文件名