钥匙缺少UC的设计师财产

时间:2017-10-06 18:28:00

标签: vb.net keyboard

我开始为我的公司编写自定义键盘代码,但我不确定为什么我无法访问设计器中的所有键。这看起来应该很简单。一个例子关键是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。我在这里做错了什么?

2 个答案:

答案 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。

enter image description here

此时,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枚举,您会看到它使用TypeConverterEditor属性进行修饰。这些属性控制着您在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枚举,则需要使用自己的TypeConverterEditor属性来装饰您的属性,该属性告诉设计人员使用默认编辑器和Enum类型转换器(此转换器允许在EnumString表示之间进行转换),而不是在Keys类型上声明的转换。

<System.ComponentModel.TypeConverterAttribute(GetType(System.ComponentModel.EnumConverter))>
<System.ComponentModel.Editor(GetType(UITypeEditor), GetType(UITypeEditor))>
Public Property MyKey() As Keys