我开始为我的公司编写自定义键盘代码,但我不确定为什么我无法访问设计器中的所有键。这看起来应该很简单。一个例子关键是Escape,但还有其他一些。
新项目 - >
右键单击 - >添加新的 - >用户控件
UserControl1.vb
Public Class UserControl1
Private _myKey As Keys
Public Property MyKey() As Keys
Get
Return _myKey
End Get
Set(ByVal value As Keys)
_myKey = value
End Set
End Property
End Class
构建 - > Form1设计师 - >将UserControl1放到Form1.vb
上 Form1.vb [设计]
- >选择UserControl11
属性 - >杂项 - > MyKey
尝试设置为Keys.Escape(或任意数量的其他)。
可用的密钥列表相当冗长,但绝对不完整。
这样做的正确方法是什么?我更希望找到一个允许我通过设计器执行此操作的解决方案,而不是以编程方式执行此操作。
以下是有效的,但同样,我不明白为什么我不能在设计师中做到这一点:
Public Class Form1
Public Sub New()
InitializeComponent()
UserControl11.MyKey = Keys.Escape
End Sub
End Class
我知道我可以定义自己的Enum并获得它,但是这个时间可能只适用于.net。我在这里做错了什么?
答案 0 :(得分:2)
首先,有明确的重新指示的好问题。
这肯定是一种奇怪的行为。也许有人有解释。
这种解决方法可能会解决这个问题
Public Class UserControl1
Private _keyCode As Integer
Public Property KeyCode As Integer
Get
Return _keyCode
End Get
Set(ByVal value As Integer)
_keyCode = value
End Set
End Property
Public Property MyKey As Keys
Get
Return CType(_keyCode, Keys)
End Get
Set(ByVal value As Keys)
_keyCode = value
End Set
End Property
End Class
您可以将属性页中的KeyCode设置为System.Windows.Forms.Keys中的Escape的整数值,例如27。
此时,MyKey实际显示Escape。不确定为什么它不会出现在列表中。
可以在MSDN上找到这些值:https://msdn.microsoft.com/en-us/library/system.windows.forms.keys(v=vs.71).aspx
注意:您也可以在MyKey中键入Escape。添加KeyCode虽然提供了一个很好的选择。
答案 1 :(得分:0)
如果您在反编译器中查看System.Windows.Forms.Keys
枚举,您会看到它使用TypeConverter
和Editor
属性进行修饰。这些属性控制着您在WinForms设计器中可以执行的操作,因为它们由MyKey
属性继承。
<Flags, TypeConverter(GetType(KeysConverter)), Editor("System.Windows.Forms.Design.ShortcutKeysEditor, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", GetType(UITypeEditor)), ComVisible(True)> _
Public Enum Keys
如果您想使用默认的Enum用户界面展示Keys
枚举,则需要使用自己的TypeConverter
和Editor
属性来装饰您的属性,该属性告诉设计人员使用默认编辑器和Enum
类型转换器(此转换器允许在Enum
和String
表示之间进行转换),而不是在Keys
类型上声明的转换。
<System.ComponentModel.TypeConverterAttribute(GetType(System.ComponentModel.EnumConverter))>
<System.ComponentModel.Editor(GetType(UITypeEditor), GetType(UITypeEditor))>
Public Property MyKey() As Keys