カスタム コントロールの開発

更新 : 2007 年 11 月

.NET Compact Framework では、ほとんどのデバイス プロジェクトの要件を満たす Windows フォーム コントロールが用意されています。これらのコントロールは、限られたリソースを有効に使用するようにデザインされています。このため、継承されるすべてのプロパティ、メソッド、およびイベントはサポートされません。サポートされない機能については、コモン コントロールから独自のカスタム コントロールを派生できます。カスタム コントロールは、Control クラスまたはアセンブリ内の既存の UserControl から継承するパブリック型を定義することにより作成できます。

コントロールの最も簡単なカスタマイズ方法は、コモン コントロールのメソッドをオーバーライドすることです。たとえば、TextBox コントロールの継承された OnKeyPress メソッドをオーバーライドして、入力を数字だけに制限するコードを作成できます。

4yf3whkx.alert_note(ja-jp,VS.90).gifメモ :

.NET Compact Framework では、基本コントロールから継承される、Windows フォーム コントロールのすべてのプロパティ、メソッド、およびイベントがサポートされているとは限りません。

コモン コントロールから派生する方法は、次のとおりです。

  • コモン コントロールで独自のプロパティ、メソッド、およびイベントをオーバーライドする。

  • コントロールに対して別のプロパティ、メソッド、およびイベントを定義する。

  • TextBox コントロールと Button コントロールのコレクションなど、複合コントロールを構築する。

  • 数値データだけを受け入れる TextBox など、ユーザーの操作にコントロールが応答する方法を定義する。

現在、.NET Compact Framework では、デザイン時に使用できるカスタム コントロールを追加する機能は用意されていません。

さらに複雑なカスタマイズが必要な場合は、Controlクラスから派生するカスタム コントロールを作成する必要があります。OnPaint メソッドをオーバーライドしてコントロールを描画し、さらに必要に応じてカスタム イベントなどの UI 以外のコントロールを作成できます。

基本の Control クラスは、派生するコントロールの描画方法については認識せず、OnPaint メソッドでは描画ロジックを提供しません。ControlOnPaint メソッドは、Paint イベントを登録イベント レシーバへディスパッチします。

.NET Compact Framework は、Form クラスおよび Control クラスに対してのみ Paint イベントおよび Resize イベントを起動します。

ツールボックスへのカスタム コントロールの追加

Microsoft Visual Studio 2005 でカスタム コントロールのプロジェクトを作成する場合は、アプリケーションのコンパイル時にカスタム コントロールがツールボックスに自動的に追加されます。次のいずれかの種類のプロジェクトを使用してカスタム コントロールを作成できます。

  • コントロール ライブラリ

  • クラス ライブラリ

  • クラス ライブラリ (1.0)

ツールボックスにカスタム コントロールを追加するには、[ツール] メニューの [ツールボックス アイテムの選択] をクリックします。次に、コントロールのアセンブリを参照します。

カスタム コントロールの手法と考慮事項

カスタム コントロールを作成する場合は、次の点に注意してください。

  • NET フレームワークでは一部のコントロールで親コントロールから値を継承できますが、.NET Compact Framework では親コントロールからの値の継承がサポートされません。この問題を回避するために、OnParentChanged メソッドを使用して親コントロールが変更されたことを把握すると共に、適切な処置を講じます。次のコード例は、親コントロールの背景色が変更されたときに背景色を変更する方法を示しています。

    protected override void OnParentChanged(EventArgs e)
    {
        base.OnParentChanged(e);
        this.BackColor = Parent.BackColor;
    }
    
    Protected Overrides Sub OnParentChanged(ByVal e As EventArgs) 
        MyBase.OnParentChanged(e)
        Me.BackColor = Parent.BackColor
    End Sub
    
  • .NET Compact Framework では、親コントロールのフォントの継承がサポートされていません。

  • ショートカット メニューを表示する "タップ アンド ホールド" イベントが発生した場所をカスタム コントロール上で検出するには、Popup イベントを処理し、MousePosition を使用して現在のマウスの座標を確認します。

  • Tab キーを使用してカスタム コントロールから以前のコントロールに移動するには、Up キーの検出時に KeyDown イベントハンドラ内で次のコードを使用します。

    this.Parent.Controls(
        this.Parent.GetChildIndex(customcontrol) - 1).Focus()
    
    Me.Parent.Controls( _
        Me.Parent.GetChildIndex(customcontrol) - 1).Focus
    

方法のトピック

次のトピックでは、カスタム コントロールを使用して拡張機能を提供する方法を説明しています。

方法 : カスタムのダブルクリック イベントを作成する

方法 : カスタム イメージのボタン コントロールを作成する

方法 : グラデーションの塗りつぶしを表示する

方法 : 数値テキスト ボックスを作成する

方法 : オーナー描画リスト ボックスを作成する

方法 : OnEnter 機能を作成する

方法 : フォームの内容をスクロールする

方法 : ListView のアイテムを並べ替える

方法 : ネイティブのコールバックを使用して TreeView をサブクラス化する

方法 : ネイティブのコールバックを使用してボタンをサブクラス化する

参照

概念

マネージ ウィンドウ プロシージャを使用したコントロールのサブクラス化

その他の技術情報

.NET Compact Framework の Windows フォーム コントロール