2017-10-06 142 views
2

我开始为我公司代码的自定义键盘的设计特性,我不知道为什么我没有获得在设计的所有密钥。这看起来应该很简单。一个关键的例子是Escape,但还有其他的。钥匙失踪UC

新建项目 - >
右击 - >新增 - >用户控件

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 

建设 - > Form 1设计 - >删除的UserControl1到Form1.vb的

Form1.vb [Design]
- > Select UserControl11 Properties - > Misc - > My键

尝试设置Keys.Escape(或任何数量的其他)。

可用密钥列表是相当冗长,但绝对不完整。

这样做的正确方法是什么?我更希望找到一个解决方案,使我可以通过设计人员执行此操作,而不必通过编程方式执行此操作。

下面的作品,但同样,我不明白为什么我不能做到这一点的设计师

Public Class Form1 

Public Sub New() 
     InitializeComponent() 
     UserControl11.MyKey = Keys.Escape 
    End Sub 
End Class 

我知道我可以定义自己的枚举,并得到它,但这么多时间可能只适用于.net。我在这里做错了什么?

回答

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 

您可以在属性页逃脱的System.Windows.Forms.Keys例如整数值,这是27

设置邀请码

enter image description here

在该点处,的myKey实际显示脱出。不知道为什么它没有出现在列表中。

的值可以在MSDN上找到:https://msdn.microsoft.com/en-us/library/system.windows.forms.keys(v=vs.71).aspx

注意:您还可以在刚刚输入的myKey逃生。添加KeyCode虽然提供了一个很好的其他选项。

+0

要做到这一点非常奇怪,以避开它。绝对有效,非常感谢。 – Aaron

+1

我希望Hans能够解释为什么会发生这种情况,并且可能会提到VB6的一些古老特征 – djv

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 

如果你想使用默认枚举UI呈现Keys枚举,你需要有自己的TypeConverterEditor属性,让设计师使用默认的编辑器和Enum型转换器(来装饰你的财产该转换器允许在EnumString表示之间进行转换)而不是在Keys类型上声明的转换。

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