2017-10-06 2 views
2

私の会社のカスタムキーボードをコーディングし始めています。なぜデザイナーのすべてのキーにアクセスできないのか分かりません。これは非常にシンプルであるように思えます。キーの1つの例は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 

ビルド - - >新しい追加> Form1のデザイナー - >ドロップUserControl1をForm1.vbを

Form1.vb [デザイン]
- > [UserControl11を選択] プロパティ - >その他 - > My Key

Keys.Escape(またはその他の任意の数)に設定しようとします。

利用可能なキーリストはかなり冗長ですが、完全には完全ではありません。

これを行う正しい方法は何ですか?私は多くの場合、デザイナーを介してこれをプログラムでロードする必要があるよりも、解決策を見つけることを好むでしょう。

以下の作品が、私はデザイナーでこれを行うことができない理由をもう一度、私は理解していない:

Public Class Form1 

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

を、私は私自身の列挙型を定義し、それを得ることができます知っているが、それはあまりですおそらくちょうど.netで動作すべき何かのための時間。私はここで間違って何をしていますか?

答えて

2

最初に、明確な方向指示で大きな質問があります。

確かに奇妙な動作です。たぶん誰かが説明をしているかもしれない。

あなたは27

である、例えばSystem.Windows.Forms.Keysにエスケープの整数値にプロパティページでキーコードを設定することができます

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 

のにこの回避策は、トリックを行う可能性があります

enter image description here

この時点で、MyKeyは実際にEscapeを表示します。なぜそれがリストに表示されないのか分かりません。

値は、MSDNで見つけることができます:https://msdn.microsoft.com/en-us/library/system.windows.forms.keys(v=vs.71).aspx

注:あなたはまた、単にMYKEYでエスケープを入力することができます。しかし、KeyCodeを追加すると素晴らしいオプションが得られます。

+0

。確かに多くの、おかげで動作します。 – Aaron

+1

ハンスは、この問題が発生した理由を説明に来て、おそらくVB6のいくつかの古代の機能をほのめかすするために、私は願っています – djv

0

逆コンパイラでSystem.Windows.Forms.Keys列挙型を見ると、TypeConverterEditor属性の両方で装飾されていることがわかります。これらの属性は、MyKeyプロパティによって継承されているので、WinFormsデザイナでできることを制御しています。

<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型コンバータ(とあなたの財産を飾るために必要があります。このコンバータは、代わりKeysタイプで宣言的なものの)EnumString表現の間の変換を可能にします。それを回避するこれを行うには持っていることは非常に奇妙な

<System.ComponentModel.TypeConverterAttribute(GetType(System.ComponentModel.EnumConverter))> 
<System.ComponentModel.Editor(GetType(UITypeEditor), GetType(UITypeEditor))> 
Public Property MyKey() As Keys 
関連する問題