継承コントロールの作成方法(2):デフォルトを設定する方法

文書番号 : 34633     文書種別 : 使用方法     登録日 : 2012/11/28     最終更新日 : 2012/11/28
文書を印刷する
対象製品
InputMan for Windows Forms 7.0J
詳細
InputMan for Windows Forms 7.0Jは、2つの継承コントロールを作成する方法を提供しています。ひとつは「デザイン機能を無効にして実行時に設定する方法」、もうひとつは「デフォルトを設定する方法」です。
このFAQでは、これらの作成方法のうち、「デフォルトを設定する方法」を説明します。

・デフォルトを設定する方法
デフォルトを設定する方法は、機能毎に対象のメソッドをオーバーライドする方法です。

[継承クラス作成の際の注意点]
  1. 引数のないコンストラクタと、IContainerを引数に取るコンストラクタの両方を実装する。
    1. 引数なしのコンストラクタのみが実装されている場合、継承コントロールを配置したアプリケーションを実行すると例外が発生する場合があります。
  2. 基底クラスのInitializeComponentメソッド内にはフィールドやサイドボタンを追加するコードを記述しない。機能毎に対象のメソッドをオーバーライドして設定します。
  3. 必要なメソッドを実装して、各デフォルトの設定を行う。サイドボタンとツールバーの初期化は、設定とは別のメソッドで行う必要があります。
    1. GetDefaultFields / デフォルトの入力フィールドの設定
    2. GetDefaultDisplayFields / デフォルトの表示フィールドの設定
    3. GetDefaultShortcuts / デフォルトのショートカットの設定
    4. GetDefaultSideButtonTypes / デフォルトのサイドボタンの設定
    5. InitializeDefaultSideButtons / デフォルトのサイドボタンの初期化
    6. GetDefaultToolBarItemTypes / デフォルトのツールバーの設定
    7. InitializeToolBarItems / デフォルトのツールバーの初期化

[継承クラスの実装例]
以下の実装例では、GcDate, GcTimeSpan, GcNumber, GcComboBoxのそれぞれのコントロールについて、基底クラスでデフォルトを設定する実装例を紹介しています。

日付コントロール(GcDate)

[Visual Basic]
Imports System
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Drawing
Imports System.Windows.Forms
Imports GrapeCity.Win.Editors
Imports GrapeCity.Win.Editors.Fields

_
Public Class GcDateEx
    Inherits GcDate

    Public Sub New()
        MyBase.New()
        initializeMyControl()
    End Sub

    Public Sub New(ByVal container As IContainer)
        MyBase.New(container)
        initializeMyControl()
    End Sub

    Private Sub initializeMyControl()
        ' 
        ' コントロールを初期化します。 
        ' 
        Me.FlatStyle = FlatStyleEx.Flat
    End Sub

    Protected Overloads Overrides Function GetDefaultFields() As DateField()
        ' 
        ' デフォルトの入力フィールドを設定します。 
        ' 
        Return DateFieldsBuilder.BuildFields("yyyy/MM/dd")
    End Function

    Protected Overloads Overrides Function GetDefaultDisplayFields() As DateDisplayField()
        ' 
        ' デフォルトの表示フィールドを設定します。 
        ' 
        Return DateDisplayFieldsBuilder.BuildFields("yyyy/M/d")
    End Function

    Protected Overloads Overrides Function GetDefaultSideButtonTypes() As List(Of Type)
        ' 
        ' デフォルトのサイドボタンを設定します。 
        ' 
        Dim defaultSideButtonTypes As New List(Of Type)()
        defaultSideButtonTypes.Add(GetType(DropDownButton))
        defaultSideButtonTypes.Add(GetType(SpinButton))
        Return defaultSideButtonTypes
        ' 
        ' 何も設定しない場合には、Nothingを返します。 
        ' Return Nothing
        ' 
    End Function

    Protected Overloads Overrides Sub InitializeDefaultSideButtons(ByVal defaultSideButtons As SideButtonBase())
        ' 
        ' デフォルトのサイドボタンを初期化します。 
        ' 
        defaultSideButtons(0).BackColor = Color.Red
        defaultSideButtons(1).BackColor = Color.Blue
    End Sub

    Protected Overloads Overrides Function GetDefaultShortcuts() As Dictionary(Of Keys, String)
        ' 
        ' デフォルトのショートカット機能を設定します。 
        ' 
        Dim defaultShortcuts As New Dictionary(Of Keys, String)()
        defaultShortcuts.Add(Keys.Enter, "NextControl")
        Return defaultShortcuts
        ' 
        ' 何も設定しない場合には、Nothingを返します。 
        ' Return Nothing
        ' 
    End Function
End Class

[C#]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using GrapeCity.Win.Editors;
using GrapeCity.Win.Editors.Fields;

namespace InheritControlFAQ_CSharp
{
    [LicenseProviderAttribute(typeof(LicenseProvider))]
    class GcDateEx : GcDate
    {
        public GcDateEx()
            : base()
        {
            initializeMyControl();
        }

        public GcDateEx(IContainer container)
            : base(container)
        {
            initializeMyControl();
        }

        private void initializeMyControl()
        {
            //
            // コントロールを初期化します。
            //
            this.FlatStyle = FlatStyleEx.Flat;
        }

        protected override DateField[] GetDefaultFields()
        {
            //
            // デフォルトの入力フィールドを設定します。
            //
            return DateFieldsBuilder.BuildFields("yyyy/MM/dd");
        }

        protected override DateDisplayField[] GetDefaultDisplayFields()
        {
            //
            // デフォルトの表示フィールドを設定します。
            //
            return DateDisplayFieldsBuilder.BuildFields("yyyy/M/d");
        }

        protected override List GetDefaultSideButtonTypes()
        {
            //
            // デフォルトのサイドボタンを設定します。
            //
            List defaultSideButtonTypes = new List();
            defaultSideButtonTypes.Add(typeof(DropDownButton));
            defaultSideButtonTypes.Add(typeof(SpinButton));
            return defaultSideButtonTypes;
            //
            // 何も設定しない場合には、nullを返します。 
            // return null;
            //
        }

        protected override void InitializeDefaultSideButtons(SideButtonBase[] defaultSideButtons)
        {
            //
            // デフォルトのサイドボタンを初期化します。
            //
            defaultSideButtons[0].BackColor = Color.Red;
            defaultSideButtons[1].BackColor = Color.Blue;
        }

        protected override Dictionary GetDefaultShortcuts()
        {
            //
            // デフォルトのショートカット機能を設定します。
            //
            Dictionary defaultShortcuts = new Dictionary();
            defaultShortcuts.Add(Keys.Enter, "NextControl");
            return defaultShortcuts;
            //
            // 何も設定しない場合には、nullを返します。 
            // return null;
            //
        }
    }
}

タイムスパンコントロール(GcTimeSpan)

[Visual Basic]
Imports System
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Drawing
Imports System.Windows.Forms
Imports GrapeCity.Win.Editors
Imports GrapeCity.Win.Editors.Fields

_
Public Class GcTimeSpanEx
    Inherits GcTimeSpan

    Public Sub New()
        MyBase.New()
        initializeMyControl()
    End Sub

    Public Sub New(ByVal container As IContainer)
        MyBase.New(container)
        initializeMyControl()
    End Sub

    Private Sub initializeMyControl()
        ' 
        ' コントロールを初期化します。 
        ' 
        Me.FlatStyle = FlatStyleEx.Flat
    End Sub

    Protected Overloads Overrides Function GetDefaultFields() As TimeSpanField()
        ' 
        ' デフォルトの入力フィールドを設定します。 
        ' 
        Return TimeSpanFieldsBuilder.BuildFields("hh時間mm分ss秒,0,.,,,-,")
    End Function

    Protected Overloads Overrides Function GetDefaultDisplayFields() As TimeSpanDisplayField()
        ' 
        ' デフォルトの表示フィールドを設定します。 
        ' 
        Return TimeSpanDisplayFieldsBuilder.BuildFields("hh時間mm分ss秒,0,.,,,-,")
    End Function

    Protected Overloads Overrides Function GetDefaultSideButtonTypes() As List(Of Type)
        ' 
        ' デフォルトのサイドボタンを設定します。 
        ' 
        Dim defaultSideButtonTypes As New List(Of Type)()
        defaultSideButtonTypes.Add(GetType(DropDownButton))
        defaultSideButtonTypes.Add(GetType(SpinButton))
        Return defaultSideButtonTypes
        ' 
        ' 何も設定しない場合には、Nothingを返します。 
        ' Return Nothing
        ' 
    End Function

    Protected Overloads Overrides Sub InitializeDefaultSideButtons(ByVal defaultSideButtons As SideButtonBase())
        ' 
        ' デフォルトのサイドボタンを初期化します。 
        ' 
        defaultSideButtons(0).BackColor = Color.Red
        defaultSideButtons(1).BackColor = Color.Blue
    End Sub

    Protected Overloads Overrides Function GetDefaultShortcuts() As Dictionary(Of Keys, String)
        ' 
        ' デフォルトのショートカット機能を設定します。 
        ' 
        Dim defaultShortcuts As New Dictionary(Of Keys, String)()
        defaultShortcuts.Add(Keys.Enter, "NextControl")
        Return defaultShortcuts
        ' 
        ' 何も設定しない場合には、Nothingを返します。 
        ' Return Nothing
        ' 
    End Function
End Class

[C#]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using GrapeCity.Win.Editors;
using GrapeCity.Win.Editors.Fields;

namespace InheritControlFAQ_CSharp
{
    [LicenseProviderAttribute(typeof(LicenseProvider))]
    class GcTimeSpanEx : GcTimeSpan
    {
        public GcTimeSpanEx()
            : base()
        {
            initializeMyControl();
        }

        public GcTimeSpanEx(IContainer container)
            : base(container)
        {
            initializeMyControl();
        }

        private void initializeMyControl()
        {
            //
            // コントロールを初期化します。
            //
            this.FlatStyle = FlatStyleEx.Flat;
        }

        protected override TimeSpanField[] GetDefaultFields()
        {
            //
            // デフォルトの入力フィールドを設定します。
            //
            return TimeSpanFieldsBuilder.BuildFields("hh時間mm分ss秒,0,.,,,-,");
        }

        protected override TimeSpanDisplayField[] GetDefaultDisplayFields()
        {
            //
            // デフォルトの表示フィールドを設定します。
            //
            return TimeSpanDisplayFieldsBuilder.BuildFields("hh時間mm分ss秒,0,.,,,-,");

        }

        protected override List GetDefaultSideButtonTypes()
        {
            //
            // デフォルトのサイドボタンを設定します。
            //
            List defaultSideButtonTypes = new List();
            defaultSideButtonTypes.Add(typeof(DropDownButton));
            defaultSideButtonTypes.Add(typeof(SpinButton));
            return defaultSideButtonTypes;
            //
            // 何も設定しない場合には、nullを返します。 
            // return null;
            //
        }

        protected override void InitializeDefaultSideButtons(SideButtonBase[] defaultSideButtons)
        {
            //
            // デフォルトのサイドボタンを初期化します。
            //
            defaultSideButtons[0].BackColor = Color.Red;
            defaultSideButtons[1].BackColor = Color.Blue;
        }

        protected override Dictionary GetDefaultShortcuts()
        {
            //
            // デフォルトのショートカット機能を設定します。
            //
            Dictionary defaultShortcuts = new Dictionary();
            defaultShortcuts.Add(Keys.Enter, "NextControl");
            return defaultShortcuts;
            //
            // 何も設定しない場合には、nullを返します。 
            // return null;
            //
        }
    }
}

数値コントロール(GcNumber)

[Visual Basic]
Imports System
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Drawing
Imports System.Windows.Forms
Imports GrapeCity.Win.Editors
Imports GrapeCity.Win.Editors.Fields

_
Public Class GcNumberEx
    Inherits GcNumber

    Public Sub New()
        MyBase.New()
        initializeMyControl()
    End Sub

    Public Sub New(ByVal container As IContainer)
        MyBase.New(container)
        initializeMyControl()
    End Sub

    Private Sub initializeMyControl()
        ' 
        ' コントロールを初期化します。 
        ' 
        Me.FlatStyle = FlatStyleEx.Flat
    End Sub

    Protected Overloads Overrides Sub InitializeDefaultFields(ByVal defaultFields As NumberFields)
        ' 
        ' デフォルトの入力フィールドを設定します。 
        ' 
        MyBase.InitializeDefaultFields(defaultFields)
        defaultFields.DecimalPart.MaxDigits = 2
        defaultFields.DecimalPart.MaxDigits = 2
        defaultFields.IntegerPart.GroupSizes = New Integer() {3, 0}
        defaultFields.IntegerPart.MaxDigits = 4
    End Sub

    Protected Overloads Overrides Function GetDefaultDisplayFields() As NumberDisplayField()
        ' 
        ' デフォルトの表示フィールドを設定します。 
        ' 
        Return NumberDisplayFieldsBuilder.BuildFields("#,###0.00,,,-,")
    End Function

    Protected Overloads Overrides Function GetDefaultSideButtonTypes() As List(Of Type)
        ' 
        ' デフォルトのサイドボタンを設定します。 
        ' 
        Dim defaultSideButtonTypes As New List(Of Type)()
        defaultSideButtonTypes.Add(GetType(DropDownButton))
        defaultSideButtonTypes.Add(GetType(SpinButton))
        Return defaultSideButtonTypes
        ' 
        ' 何も設定しない場合には、Nothingを返します。 
        ' Return Nothing
        ' 
    End Function

    Protected Overloads Overrides Sub InitializeDefaultSideButtons(ByVal defaultSideButtons As SideButtonBase())
        ' 
        ' デフォルトのサイドボタンを初期化します。 
        ' 
        defaultSideButtons(0).BackColor = Color.Red
        defaultSideButtons(1).BackColor = Color.Blue
    End Sub

    Protected Overloads Overrides Function GetDefaultShortcuts() As Dictionary(Of Keys, String)
        ' 
        ' デフォルトのショートカット機能を設定します。 
        ' 
        Dim defaultShortcuts As New Dictionary(Of Keys, String)()
        defaultShortcuts.Add(Keys.Enter, "NextControl")
        Return defaultShortcuts
        ' 
        ' 何も設定しない場合には、Nothingを返します。 
        ' Return Nothing
        ' 
    End Function
End Class

[C#]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using GrapeCity.Win.Editors;
using GrapeCity.Win.Editors.Fields;

namespace InheritControlFAQ_CSharp
{
    [LicenseProviderAttribute(typeof(LicenseProvider))]
    class GcNumberEx : GcNumber
    {
        public GcNumberEx()
            : base()
        {
            initializeMyControl();
        }

        public GcNumberEx(IContainer container)
            : base(container)
        {
            initializeMyControl();
        }

        private void initializeMyControl()
        {
            //
            // コントロールを初期化します。
            //
            this.FlatStyle = FlatStyleEx.Flat;
        }

        protected override void InitializeDefaultFields(NumberFields defaultFields)
        {
            //
            // デフォルトの入力フィールドを設定します。
            //
            base.InitializeDefaultFields(defaultFields);
            defaultFields.DecimalPart.MaxDigits=2;
            defaultFields.DecimalPart.MaxDigits = 2;
            defaultFields.IntegerPart.GroupSizes = new int[] {3, 0};
            defaultFields.IntegerPart.MaxDigits = 4;
        }

        protected override NumberDisplayField[] GetDefaultDisplayFields()
        {
            //
            // デフォルトの表示フィールドを設定します。
            //
            return NumberDisplayFieldsBuilder.BuildFields("#,###0.00,,,-,");

        }

        protected override List GetDefaultSideButtonTypes()
        {
            //
            // デフォルトのサイドボタンを設定します。
            //
            List defaultSideButtonTypes = new List();
            defaultSideButtonTypes.Add(typeof(DropDownButton));
            defaultSideButtonTypes.Add(typeof(SpinButton));
            return defaultSideButtonTypes;
            //
            // 何も設定しない場合には、nullを返します。 
            // return null;
            //
        }

        protected override void InitializeDefaultSideButtons(SideButtonBase[] defaultSideButtons)
        {
            //
            // デフォルトのサイドボタンを初期化します。
            //
            defaultSideButtons[0].BackColor = Color.Red;
            defaultSideButtons[1].BackColor = Color.Blue;
        }

        protected override Dictionary GetDefaultShortcuts()
        {
            //
            // デフォルトのショートカット機能を設定します。
            //
            Dictionary defaultShortcuts = new Dictionary();
            defaultShortcuts.Add(Keys.Enter, "NextControl");
            return defaultShortcuts;
            //
            // 何も設定しない場合には、nullを返します。 
            // return null;
            //
        }
    }
}

コンボコントロール(GcComboBox)

[Visual Basic]
Imports System
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Drawing
Imports System.Windows.Forms
Imports GrapeCity.Win.Editors
Imports GrapeCity.Win.Editors.Fields

_
Public Class GcComboBoxEx
    Inherits GcComboBox

    Public Sub New()
        MyBase.New()
        initializeMyControl()
    End Sub

    Public Sub New(ByVal container As IContainer)
        MyBase.New(container)
        initializeMyControl()
    End Sub

    Private Sub initializeMyControl()
        ' 
        ' コントロールを初期化します。 
        ' 
        Me.FlatStyle = FlatStyleEx.Flat
    End Sub

    Protected Overloads Overrides Function GetDefaultSideButtonTypes() As List(Of Type)
        ' 
        ' デフォルトのサイドボタンを設定します。 
        ' 
        Dim defaultSideButtonTypes As New List(Of Type)()
        defaultSideButtonTypes.Add(GetType(DropDownButton))
        defaultSideButtonTypes.Add(GetType(SpinButton))
        Return defaultSideButtonTypes
        ' 
        ' 何も設定しない場合には、Nothingを返します。 
        ' Return Nothing
        ' 
    End Function

    Protected Overloads Overrides Sub InitializeDefaultSideButtons(ByVal defaultSideButtons As SideButtonBase())
        ' 
        ' デフォルトのサイドボタンを初期化します。 
        ' 
        defaultSideButtons(0).BackColor = Color.Red
        defaultSideButtons(1).BackColor = Color.Blue
    End Sub

    Protected Overloads Overrides Function GetDefaultShortcuts() As Dictionary(Of Keys, String)
        ' 
        ' デフォルトのショートカット機能を設定します。 
        ' 
        Dim defaultShortcuts As New Dictionary(Of Keys, String)()
        defaultShortcuts.Add(Keys.Enter, "NextControl")
        Return defaultShortcuts
        ' 
        ' 何も設定しない場合には、Nothingを返します。 
        ' Return Nothing
        ' 
    End Function
End Class

[C#]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using GrapeCity.Win.Editors;
using GrapeCity.Win.Editors.Fields;

namespace InheritControlFAQ_CSharp
{
    [LicenseProviderAttribute(typeof(LicenseProvider))]
    class GcComboBoxEx : GcComboBox
    {
        public GcComboBoxEx()
            : base()
        {
            initializeMyControl();
        }

        public GcComboBoxEx(IContainer container)
            : base(container)
        {
            initializeMyControl();
        }

        private void initializeMyControl()
        {
            //
            // コントロールを初期化します。
            //
            this.FlatStyle = FlatStyleEx.Flat;
        }

        protected override List GetDefaultSideButtonTypes()
        {
            //
            // デフォルトのサイドボタンを設定します。
            //
            List defaultSideButtonTypes = new List();
            defaultSideButtonTypes.Add(typeof(DropDownButton));
            defaultSideButtonTypes.Add(typeof(SpinButton));
            return defaultSideButtonTypes;
            //
            // 何も設定しない場合には、nullを返します。 
            // return null;
            //
        }

        protected override void InitializeDefaultSideButtons(SideButtonBase[] defaultSideButtons)
        {
            //
            // デフォルトのサイドボタンを初期化します。
            //
            defaultSideButtons[0].BackColor = Color.Red;
            defaultSideButtons[1].BackColor = Color.Blue;
        }

        protected override Dictionary GetDefaultShortcuts()
        {
            //
            // デフォルトのショートカット機能を設定します。
            //
            Dictionary defaultShortcuts = new Dictionary();
            defaultShortcuts.Add(Keys.Enter, "NextControl");
            return defaultShortcuts;
            //
            // 何も設定しない場合には、nullを返します。 
            // return null;
            //
        }
    }
}
関連情報