バージョン

ControlContainerEditor オブジェクトを使用して WinGrid セル内に任意のコントロールを組み込む

始める前に

WinControlContainerEditor™ によって、埋め込みエディターをサポートする Ultimate UI for Windows Forms コントロール内に任意のコントロールを組み込むことが可能となります。RenderingControl および EditingControl プロパティ設定を使用することによって描画に使用されるコントロールと、編集に使用されるコントロールの 2 つのコントロールを組み込むことができます。レンダリング コントロールは添付されるオブジェクトの元となる値またはテキストを描画します(たとえば WinGrid™ セル、WinTree™ ノードなど)。編集コントロールは添付されるオブジェクトの編集機能を提供します。

Note

注: レンダリング コントロールはビットマップに描画されます。したがって、レンダリング コントロールとして使用されるコントロールは DrawToBitmap メソッドをサポートする必要があります。

達成すること

このトピックは、ControlContainerEditor オブジェクトを使用することによって、標準的な Microsoft® .NET NumericUpDown コントロールと WinGauge™ コントロールが編集コントロールおよびレンダリング コントロールとして WinGrid セル内に組み込まれる方法を示します。レンダリング コントロールと編集コントロールは両方とも UltraGridCell オブジェクトの値に使用できる単一のプロパティ(たとえば Text プロパティまたは Value プロパティ)を持つ必要があります。ControlContainerEditor の使用についての詳細および要件については、 ControlContainerEditor オブジェクトの概要を参照してください。WinGauge コントロールには Value プロパティまたは Text プロパティがないため、WinGauge コントロール間でどのような値でもパスできるように ControlContainerEditor クラスから継承されるクラスを作成し、 RendererValue プロパティをオーバーライドする必要があります。

以下の手順を実行します。

  1. UltraGrid コントロール、UltraGauge コントロールおよび. NET NumericUpDown コントロールを Visual Studio® Toolbox から Form にドラッグ アンド ドロップします。

  2. UltraGrid コントロールを Northwind データベースの Products DataTable にバインドします。

  3. ControlContainerEditor クラスから継承する Editor という名前のクラスを作成します。ControlContainerEditor クラスは Infragistics.Win.UltraWinEditors 名前空間で見つけることができます。

  4. Form オブジェクトのコード ビハインドおよび Editor クラス コード ファイル内に以下の using/imports のディレクティブを配置します。これによって、完全修飾名を常に入力する必要はありません。

Visual Basic の場合:

Imports System.Windows.Forms
Imports Infragistics.Win.UltraWinEditors
Imports Infragistics.UltraGauge.Resources
Imports Infragistics.Win.UltraWinGauge

C# の場合:

using System.Windows.Forms;
using Infragistics.Win.UltraWinEditors;
using Infragistics.UltraGauge.Resources;
using Infragistics.Win.UltraWinGauge;
  1. 以下のメンバーを Editor クラスに追加します。

Visual Basic の場合:

#Region "Private Members"
Private gauge As UltraGauge
Private numericUpDown As NumericUpDown
Private marker As LinearGaugeBarMarker
#End Region

C# の場合:

#region Private Members
private UltraGauge gauge;
private NumericUpDown numericUpDown;
LinearGaugeBarMarker marker;
#endregion
  1. Editor クラスからデフォルトのコンストラクターを削除して以下のコードを記述します。

Visual Basic の場合:

#Region "Constructor"
Public Sub New(ByVal gauge As UltraGauge, ByVal numericUpDown As NumericUpDown)
    Me.gauge = gauge
    Me.numericUpDown = numericUpDown
    ' Gauge コントロールをレンダリング コントロールとして設定します
    Me.RenderingControl = gauge
    '  NumericUpDown コントロールを編集コントロールとして設定します
    Me.EditingControl = numericUpDown
    ' ゲージ コントロールのマーカーへの参照を取得します。これによりその値を簡単に設定できます。
    Dim linearGauge As LinearGauge = DirectCast(gauge.Gauges(0), LinearGauge)
    Dim scale As LinearGaugeScale = DirectCast(linearGauge.Scales(0), LinearGaugeScale)
    Me.marker = DirectCast(scale.Markers(0), LinearGaugeBarMarker)
End Sub
#End Region

C# の場合:

        #region Constructor
        public Editor(UltraGauge gauge, NumericUpDown numericUpDown)
        {
            this.gauge = gauge;
            this.numericUpDown = numericUpDown;
            // Gauge コントロールをレンダリング コントロールとして設定します
            this.RenderingControl = gauge;
            // NumericUpDown コントロールを編集コントロールとして設定します
            this.EditingControl = numericUpDown;
           // ゲージ コントロールのマーカーへの参照を取得します。これによりその値を簡単に設定できます。
            LinearGauge linearGauge = (LinearGauge)gauge.Gauges[0];
            LinearGaugeScale scale = (LinearGaugeScale)linearGauge.Scales[0];
            this.marker = (LinearGaugeBarMarker)scale.Markers[0];
        }
        #endregion
  1. ControlContainerEditor クラスの RendererValue プロパティをオーバーライドして、LinearGaugeBarMarker オブジェクト値を取得および設定します。

Visual Basic の場合:

#Region "override RendererValue"
Protected Overloads Overrides Property RendererValue() As Object
    Get
        Return Me.marker.Value
    End Get
    Set(ByVal value As Object)
        Me.marker.Value = value
    End Set
End Property
#End Region

C# の場合:

#region override RendererValue
        protected override object RendererValue
        {
            get
            {
                return this.marker.Value;
            }
            set
            {
                this.marker.Value = value;
            }
        }
        #endregion
  1. 以下のコードは、レンダリング コントロールと編集コントロールを指定する Editor クラスを UltraGrid の UnitsInStock 列に割り当てます。UltraGrid コントロールの IntializeLayout イベントにコードを記述します。

Visual Basic の場合:

Dim editor As New Editor(Me.ultraGauge1, Me.numericUpDown1)
e.Layout.Bands(0).Columns("UnitsInStock").Editor = editor

C# の場合:

Editor editor = new Editor(this.ultraGauge1, this.numericUpDown1);
e.Layout.Bands[0].Columns["UnitsInStock"].Editor = editor;

以下のスクリーンショットは、レンダリング コントロールとして WinGauge を組み込み、編集コントロールとして NumericUpDown コントロールを組み込んだ WinGrid を示します。

WinControlContainerEditor Embed Any Control Within WinGrid cell using ControlContainerEditor Object 01.png