Vb.net 作为UC的设计器属性缺少密钥

Vb.net 作为UC的设计器属性缺少密钥,vb.net,keyboard,Vb.net,Keyboard,我开始为我的公司编写自定义键盘,我不知道为什么我不能访问设计器中的所有键。这看起来应该很简单。一个例子是Escape,但还有其他一些 新项目-> 右键单击->添加新->用户控制 UserControl1.vb Build->Form1 designer->将UserControl1放到Form1.vb上 Form1.vb[设计] ->选择UserControl11 属性->杂项->MyKey 尝试设置为Keys.Escape(或任意数量的其他) 可用密钥列表相当详细,但绝对不完整 正确的方法是什

我开始为我的公司编写自定义键盘,我不知道为什么我不能访问设计器中的所有键。这看起来应该很简单。一个例子是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