2017-10-06 141 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