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

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

・デフォルトを設定する方法
デフォルトを設定する方法は、InputMan for Windows Forms 6.0JのService Pack 1で新しく提供された継承コントロールの作成方法です。この方法は、機能毎に対象のメソッドをオーバーライドする方法です。

[継承クラス作成の際の注意点]
  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;
      //
    }
  }
}

この文書は、以前は次のFAQ IDで公開されていました : 13262