Vb.net 作为UC的设计器属性缺少密钥
我开始为我的公司编写自定义键盘,我不知道为什么我不能访问设计器中的所有键。这看起来应该很简单。一个例子是Escape,但还有其他一些 新项目->Vb.net 作为UC的设计器属性缺少密钥,vb.net,keyboard,Vb.net,Keyboard,我开始为我的公司编写自定义键盘,我不知道为什么我不能访问设计器中的所有键。这看起来应该很简单。一个例子是Escape,但还有其他一些 新项目-> 右键单击->添加新->用户控制 UserControl1.vb Build->Form1 designer->将UserControl1放到Form1.vb上 Form1.vb[设计] ->选择UserControl11 属性->杂项->MyKey 尝试设置为Keys.Escape(或任意数量的其他) 可用密钥列表相当详细,但绝对不完整 正确的方法是什
右键单击->添加新->用户控制
UserControl1.vb Build->Form1 designer->将UserControl1放到Form1.vb上 Form1.vb[设计]
->选择UserControl11 属性->杂项->MyKey
尝试设置为Keys.Escape(或任意数量的其他) 可用密钥列表相当详细,但绝对不完整 正确的方法是什么?我更希望找到一个解决方案,允许我通过设计器来完成这项工作,而不是通过编程方式在加载时完成这项工作 下面的内容很有效,但我不明白为什么我不能在designer中这样做:
Public Class Form1
Public Sub New()
InitializeComponent()
UserControl11.MyKey = Keys.Escape
End Sub
End Class
我知道我可以定义自己的枚举并获得它,但这需要花太多时间来做一些可能只适用于.net的事情。我在这里做错了什么?首先,提出一个很好的问题,并给出清晰的说明 这肯定是奇怪的行为。也许有人有解释 不过,这种变通方法可能会奏效
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上找到:
注意:您也可以在MyKey中键入Escape。添加KeyCode提供了一个不错的选择。如果您查看反编译器中的
System.Windows.Forms.Keys
Enum,您将看到它同时带有TypeConverter
和Editor
属性。这些属性控制您在WinForms designer中可以执行的操作,因为它们由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
很奇怪,必须这样做才能绕过它。非常感谢。我希望Hans能来解释为什么会发生这种情况,并可能提及VB6的一些古老功能
<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
<System.ComponentModel.TypeConverterAttribute(GetType(System.ComponentModel.EnumConverter))>
<System.ComponentModel.Editor(GetType(UITypeEditor), GetType(UITypeEditor))>
Public Property MyKey() As Keys