クラスから入力コントロールを自動生成する その2(前編) |
・属性を作成する
・チェックボックスやコンボボックスなど
入力コントロールのパターンを増やす
・入力コントロールの表示・非表示が出来るようにする
【サンプルを作成した環境】
・WindowsForms
・.NetFramework 4.0
※VisualStudio C# 2010 Express使用
サンプルのネームスペースの構造
WinAutoControl
-Attributes
-DisplayOrderAttribute.cs(new)
-InputControlAttribute.cs(new)
-DataSources
-ComboBoxItem.cs(new)
-Interfaces
-ISettingControlDataSource.cs(new)
-ViewModels
-TestVM.cs
-UserControls
-UcSettingControl.cs
今回実装するサンプルの完成イメージです。
ボタンクリックで「値チェックボックス」の表示・非表示を行います。
作成手順は以下のとおりです。
【前編】
1.属性の作成
2.入力コントロール用データソース取得インターフェースの作成
3.コンボボックス選択値作成用クラスの作成
【中編】
4-1.FlowLayoutPanelクラスを継承したUcSettingControlクラスの修正1
4-2.FlowLayoutPanelクラスを継承したUcSettingControlクラスの修正2
【後編】
5.検索コントロール作成用クラスに属性を追加
6.UcSettingControlクラスの利用方法
順を追って、説明します。
1.属性の作成
属性を2つ作成します。
・プロパティの表示順番を設定する
「DisplayOrderAttribute」
・入力コントロールを設定する
「InputControlAttribute」
○ソースコード
・DisplayOrderAttributeクラス
using System;
namespace WinAutoControl.Attributes
{
/// <summary>
/// コントロール表示用属性
/// </summary>
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
public class DisplayOrderAttribute : Attribute
{
/// <summary>
/// 表示順番
/// </summary>
public int Order { get; set; }
}
}
・InputControlAttributeクラス
using System;
namespace WinAutoControl.Attributes
{
/// <summary>
/// 入力コントロール定義用属性
/// </summary>
[AttributeUsage(AttributeTargets.Property,AllowMultiple=false)]
public class InputControlAttribute : Attribute
{
/// <summary>
/// ラベル表示名
/// </summary>
public string LabelText { get; set; }
/// <summary>
/// 入力コントロール:種類
/// </summary>
public Type InputControl { get; set; }
/// <summary>
/// 入力コントロール:選択リストを定義するクラス
/// </summary>
/// <remarks>コンボボックスやリストボックスの選択情報</remarks>
public Type DataSourceClass { get; set; }
}
}
2.入力コントロール用データソース取得インターフェースの作成
属性クラス「InputControlAttribute」のDataSourceClass用のインターフェースを定義します。
UcSettingControlではインターフェースを利用することで
入力コントロール用データソースクラスを意識することなく、
選択候補情報を取得することができます。
○ソースコード
namespace WinAutoControl.Interfaces
{
/// <summary>
/// 入力コントロール用データソース取得インターフェース
/// </summary>
public interface ISettingControlDataSource
{
/// <summary>
/// 選択値を取得
/// </summary>
/// <returns></returns>
dynamic GetItem();
/// <summary>
/// 表示プロパティ名
/// </summary>
/// <returns></returns>
string GetDisplayMember();
/// <summary>
/// 設定値プロパティ名
/// </summary>
/// <returns></returns>
string GetValueMember();
}
}
3.コンボボックス選択値作成用クラスの作成
コンボボックスの選択候補リストを取得するクラスの例です。
今回はプログラムでリストを作成していますが、
実際にはDBなどから取得する実装になるでしょう。
○ソースコード
using System.Collections.Generic;
using WinAutoControl.Interfaces;
namespace WinAutoControl.DataSources
{
/// <summary>
/// コンボボックス選択項目取得サンプル
/// </summary>
public class ComboBoxItem : ISettingControlDataSource
{
//表示項目と設定値のクラス
public class Item
{
public string Text { set; get; }
public int Value { set; get; }
}
/// <summary>
/// 選択値を取得
/// </summary>
/// <returns>選択項目リスト</returns>
/// <remarks>実際はDBから取得する実装になります</remarks>
public dynamic GetItem()
{
var result = new List<Item>();
result.Add(new Item() { Text = "選択A", Value = 1 });
result.Add(new Item() { Text = "選択B", Value = 10 });
result.Add(new Item() { Text = "選択C", Value = 20 });
return result;
}
/// <summary>
/// 表示プロパティ名
/// </summary>
/// <returns></returns>
public string GetDisplayMember()
{
return "Text";
}
/// <summary>
/// 設定値プロパティ名
/// </summary>
/// <returns></returns>
public string GetValueMember()
{
return "Value";
}
}
}
よかったらクリックしてください。
にほんブログ村