PowerTools InputMan for Windows Forms 8.0J
デザイン機能を無効にする方法

各機能が自動に追加されるデザイン機能を無効にし、実行時にフィールドやサイドボタン、ショートカット機能を設定するためには、以下の点について考慮する必要があります。

デザイン機能を無効にする方法の特長と注意点

デザイン機能を無効にする方法についての特長や注意点については以下のとおりです。

この方法を推奨するケース

共通の継承コントロールの作成に向いています。基底クラスで一括してフィールドやサイドボタンを管理する場合にはこの方法が有効です。

この方法の特長

フォームにコントロールを配置した後でも、基底クラスの変更はリビルドすることで反映されます。

この方法の難点

この方法を実装する際の注意点

サンプルコード

デザイン機能で自動に追加される動作を無効にする方法は、いくつかのメソッドを実装します。以下は日付時刻コントロールを継承したコントロールの実装例です。

Imports System.ComponentModel
Imports System.Drawing
Imports GrapeCity.Win.Editors
Imports GrapeCity.Win.Editors.Fields

Namespace MyGcDateTime
    <LicenseProviderAttribute(GetType(LicenseProvider))> _
    Public Class MyGcDateTime
        Inherits GcDateTime

        Public Sub New()
            ' 
            ' 引数なしのコンストラクタでは、最初にフィールドなどを消去します。 
            ' 
            Me.Fields.Clear()
            Me.DisplayFields.Clear()
            Me.SideButtons.Clear()

            initializeCollections()
        End Sub

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

        Private Sub initializeCollections()
            ' 
            ' フィールドなどを初期化します。 
            ' 
            Me.Fields.AddRange("yyyy/MM/dd")
            Me.DisplayFields.AddRange("yyyy/M/d")
            Me.SideButtons.Add(New DropDownButton())
            Me.SideButtons.Add(New SpinButton())
            Me.SideButtons(0).BackColor = Color.Red
            Me.SideButtons(1).BackColor = Color.Blue
            Me.FlatStyle = FlatStyleEx.Flat

            ' 注意:基底クラス側でショートカット機能を設定した場合には 
            ' 継承コントロールを貼り付けるフォーム上のショートカット機能を 
            ' 手動で削除する必要があります。 
            Dim newShortcut As New GcShortcut()
            newShortcut.GetShortcuts(Me).Add(System.Windows.Forms.Keys.Enter, newShortcut, "NextControl")
        End Sub

        ' 以下の2つのメソッドを実装することにより、 
        ' 継承コントロールをフォームにドロップした時にコントロールに 
        ' 入力フィールドが追加される動作を無効にします。 
        Public Shadows ReadOnly Property Fields() As DateTimeFieldCollection
            Get
                Return MyBase.Fields
            End Get
        End Property

        Private Function ShouldSerializeFields() As Boolean
            Return False
        End Function

        ' 以下の2つのメソッドを実装することにより、 
        ' 継承コントロールをフォームにドロップした時にコントロールに 
        ' 表示フィールドが追加される動作を無効にします。 
        Public Shadows ReadOnly Property DisplayFields() As DateTimeDisplayFieldCollection
            Get
                Return MyBase.DisplayFields
            End Get
        End Property

        Private Function ShouldSerializeDisplayFields() As Boolean
            Return False
        End Function

        ' 以下の2つのメソッドを実装することにより、 
        ' 継承コントロールをフォームにドロップした時にコントロールに 
        ' サイドボタンが追加される動作を無効にします。 
        Public Shadows ReadOnly Property SideButtons() As SideButtonCollection
            Get
                Return MyBase.SideButtons
            End Get
        End Property

        Private Function ShouldSerializeSideButtons() As Boolean
            Return False
        End Function
    End Class
End Namespace
using System.ComponentModel;
using System.Drawing;
using GrapeCity.Win.Editors;
using GrapeCity.Win.Editors.Fields;

namespace MyGcDateTime
{
    [LicenseProviderAttribute(typeof(LicenseProvider))]
    public class MyGcDateTime : GcDateTime
    {
        public MyGcDateTime()
        {
            //
            // 引数なしのコンストラクタでは、最初にフィールドなどを消去します。
            //
            this.Fields.Clear();
            this.DisplayFields.Clear();
            this.SideButtons.Clear();

            initializeCollections();
        }

        public MyGcDateTime(IContainer container)
            : base(container)
        {
            initializeCollections();
        }

        private void initializeCollections()
        {
            //
            // フィールドなどを初期化します。
            //
            this.Fields.AddRange("yyyy/MM/dd");
            this.DisplayFields.AddRange("yyyy/M/d");
            this.SideButtons.Add(new DropDownButton());
            this.SideButtons.Add(new SpinButton());
            this.SideButtons[0].BackColor = Color.Red;
            this.SideButtons[1].BackColor = Color.Blue;
            this.FlatStyle = FlatStyleEx.Flat;

            // 注意:基底クラス側でショートカット機能を設定した場合には
            // 継承コントロールを貼り付けるフォーム上のショートカット機能を
            // 手動で削除する必要があります。
            GcShortcut newShortcut = new GcShortcut();
            newShortcut.GetShortcuts(this).Add(System.Windows.Forms.Keys.Enter
                                             , newShortcut
                                             , "NextControl");
        }

        // 以下の2つのメソッドを実装することにより、
        // 継承コントロールをフォームにドロップした時にコントロールに
        // 入力フィールドが追加される動作を無効にします。
        public new DateTimeFieldCollection Fields
        {
            get { return base.Fields; }
        }

        private bool ShouldSerializeFields()
        {
            return false;
        }

        // 以下の2つのメソッドを実装することにより、
        // 継承コントロールをフォームにドロップした時にコントロールに
        // 表示フィールドが追加される動作を無効にします。
        public new DateTimeDisplayFieldCollection DisplayFields
        {
            get { return base.DisplayFields; }
        }

        private bool ShouldSerializeDisplayFields()
        {
            return false;
        }

        // 以下の2つのメソッドを実装することにより、
        // 継承コントロールをフォームにドロップした時にコントロールに
        // サイドボタンが追加される動作を無効にします。
        public new SideButtonCollection SideButtons
        {
            get { return base.SideButtons; }
        }

        private bool ShouldSerializeSideButtons()
        {
            return false;
        }
    }
}
サイドボタンのデザイン動作を回避する方法

前項の方法を用いた場合、基底クラスでサイドボタンを設定していても、継承コントロールをフォームに配置したときには設定が反映されず、デフォルトのサイドボタンが設定されたように表示されてしまいます。この動作はフォームにコントロールを配置したときのみで一度デザイン画面を閉じ再び開くか、リビルドを行うことでデフォルトのサイドボタンは消え、基底クラスで設定したサイドボタンの設定が反映されます。
この動作を回避するためには、以下のようにコードを記述する方法があります。

この問題は、サイドボタンのデザイン機能が反映されない以外、動作に影響を及ぼすことはありません。継承コントロールを配置後にリビルド等で設定を反映させた後は、再びそのコントロールのデザインが不正になることはありません。継承コントロールの配置状況や初回のデザインが不正であることの重要度などを考慮し、上記方法を採用するか、下記対応コードを採用するかを検討することを推奨します。


Imports System
Imports System.Collections.Generic
Imports System.Drawing
Imports System.Windows.Forms
Imports GrapeCity.Win.Editors
Imports GrapeCity.Win.Editors.Fields

Namespace MyGcDateTime
    <LicenseProviderAttribute(GetType(LicenseProvider))> _
    Public Class MyGcDateTime2
        Inherits GcDateTime

        Public Sub New()
            ' 
            ' 引数なしのコンストラクタのフィールドの消去処理を削除します。 
            ' 
            initializeCollections()
        End Sub

        ' 
        ' 引数ありのコンストラクタを削除します。 
        ' 

        Private Sub initializeCollections()
            ' 
            ' フィールド、サイドボタン、ショートカット機能の初期化は下記に移動します。 
            ' 
            Me.FlatStyle = FlatStyleEx.Flat
        End Sub

        ' 以下の2つのメソッドを実装することにより、 
        ' 継承コントロールをフォームにドロップした時にコントロールに 
        ' 入力フィールドが追加される動作を無効にします。 
        Public Shadows ReadOnly Property Fields() As DateTimeFieldCollection
            Get
                Return MyBase.Fields
            End Get
        End Property

        Private Function ShouldSerializeFields() As Boolean
            Return False
        End Function

        ' 以下の2つのメソッドを実装することにより、 
        ' 継承コントロールをフォームにドロップした時にコントロールに 
        ' 表示フィールドが追加される動作を無効にします。 
        Public Shadows ReadOnly Property DisplayFields() As DateTimeDisplayFieldCollection
            Get
                Return MyBase.DisplayFields
            End Get
        End Property

        Private Function ShouldSerializeDisplayFields() As Boolean
            Return False
        End Function

        ' 以下の2つのメソッドを実装することにより、 
        ' 継承コントロールをフォームにドロップした時にコントロールに 
        ' サイドボタンが追加される動作を無効にします。 
        Public Shadows ReadOnly Property SideButtons() As SideButtonCollection
            Get
                Return MyBase.SideButtons
            End Get
        End Property

        Private Function ShouldSerializeSideButtons() As Boolean
            Return False
        End Function

        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
        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
        End Function
    End Class
End Namespace
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using GrapeCity.Win.Editors;
using GrapeCity.Win.Editors.Fields;

namespace MyGcDateTime
{
    [LicenseProviderAttribute(typeof(LicenseProvider))]
    public class MyGcDateTime2 : GcDateTime
    {
        public MyGcDateTime2()
        {
            //
            // 引数なしのコンストラクタのフィールドの消去処理を削除します。
            //
            initializeCollections();
        }

        //
        // 引数ありのコンストラクタを削除します。
        //

        private void initializeCollections()
        {
            //
            // フィールド、サイドボタン、ショートカット機能の初期化は下記に移動します。
            //
            this.FlatStyle = FlatStyleEx.Flat;
        }

        // 以下の2つのメソッドを実装することにより、
        // 継承コントロールをフォームにドロップした時にコントロールに
        // 入力フィールドが追加される動作を無効にします。
        public new DateTimeFieldCollection Fields
        {
            get { return base.Fields; }
        }

        private bool ShouldSerializeFields()
        {
            return false;
        }

        // 以下の2つのメソッドを実装することにより、
        // 継承コントロールをフォームにドロップした時にコントロールに
        // 表示フィールドが追加される動作を無効にします。
        public new DateTimeDisplayFieldCollection DisplayFields
        {
            get { return base.DisplayFields; }
        }

        private bool ShouldSerializeDisplayFields()
        {
            return false;
        }

        // 以下の2つのメソッドを実装することにより、
        // 継承コントロールをフォームにドロップした時にコントロールに
        // サイドボタンが追加される動作を無効にします。
        public new SideButtonCollection SideButtons
        {
            get { return base.SideButtons; }
        }

        private bool ShouldSerializeSideButtons()
        {
            return false;
        }

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

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

        protected override List<Type> GetDefaultSideButtonTypes()
        {
            //
            // デフォルトのサイドボタンを設定します。
            //
            List<Type> defaultSideButtonTypes = new List<Type>();
            defaultSideButtonTypes.Add(typeof(DropDownButton));
            defaultSideButtonTypes.Add(typeof(SpinButton));
            return defaultSideButtonTypes;
        }

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

        protected override Dictionary<Keys, string> GetDefaultShortcuts()
        {
            //
            // デフォルトのショートカット機能を設定します。
            //
            Dictionary<Keys, string> defaultShortcuts = new Dictionary<Keys, string>();
            defaultShortcuts.Add(Keys.Enter, "NextControl");
            return defaultShortcuts;
        }
    }
}
参照

 

 


© 2004-2015 GrapeCity inc. All rights reserved.