DOBON.NETプログラミング道掲示板

■34533 / 親階層)  デザイナのプロパティウィンドウで静的プロパティを選択したい
□投稿者/ masa 一般人(1回)-(2020/09/15(Tue) 22:14:50)
  • アイコン環境/言語:[Windows 10 64bit, C# WinForms, .NET Framework 4.7.2] 
    分類:[.NET] 

    2020/09/15(Tue) 22:16:46 編集(投稿者)

    久しぶりに投稿させていただきます。

    C#のWinFormsアプリケーションでカスタムコントロールを作成しています。
    デザイナのプロパティウィンドウにおいて、クラス型プロパティの設定値を
    自作クラスの静的プロパティの中から選択・ソースに反映させたいです。

    イメージとしてはColorプロパティでシステムのControlを選択すると、
    ソースにSystem.Drawing.SystemColors.Control;と反映されるのを実現させたいです。

    以下は例として、カスタムコントロールのForeColorを自作クラスの静的プロパティから選択させるサンプルです。
    このままだと、ソースにはSystem.Drawing.Color.FromArgb(((int)(((byte)(254)))), ((int)(((byte)(254)))), ((int)(((byte)(254)))));のように反映されてしまうため、
    MyLabelColors.MyWhite;のように反映されるようにしたいです。
    上手く言葉で説明できず恐縮ですが、どなたか解決策をご教示いただけますと幸いです。

    public class MyLabel : Label
    {
    [Editor(typeof(MyLabelTypeEditor), typeof(UITypeEditor))]
    public override Color ForeColor { get => base.ForeColor; set => base.ForeColor = value; }
    }

    public class MyLabelTypeEditor : UITypeEditor
    {
    public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context) => UITypeEditorEditStyle.DropDown;

    public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
    {
    IWindowsFormsEditorService editorService = null;
    if (provider != null) editorService = provider.GetService(typeof(IWindowsFormsEditorService)) as IWindowsFormsEditorService;
    if (editorService == null) return value;

    var listBox = new ListBox();
    listBox.Click += (sender, e) => editorService.CloseDropDown();
    foreach (var propertiy in typeof(MyLabelColors).GetProperties())
    {
    listBox.Items.Add(propertiy.Name);
    }
    editorService.DropDownControl(listBox);

    return (listBox.SelectedItem != null ? typeof(MyLabelColors).GetProperty(listBox.SelectedItem.ToString()).GetValue(null) : value);
    }
    }

    public class MyLabelColors
    {
    public static Color MyBlack { get => Color.FromArgb(1, 1, 1); }
    public static Color MyWhite { get => Color.FromArgb(254, 254, 254); }
    }
マルチポストを報告
違反を報告
削除キー/

前の記事(元になった記事) 次の記事(この記事の返信)
親記事 →Re[1]: デザイナのプロパティウィンドウで静的プロパティを選択したい /Hongliang
 
上記関連ツリー

Nomalアイコン デザイナのプロパティウィンドウで静的プロパティを選択したい / masa (20/09/15(Tue) 22:14) #34533 ←Now
Nomalアイコン Re[1]: デザイナのプロパティウィンドウで静的プロパティを選択したい / Hongliang (20/09/16(Wed) 09:43) #34534
  └Nomalアイコン Re[2]: デザイナのプロパティウィンドウで静的プロパティを選択したい / masa (20/09/17(Thu) 22:51) #34536
    └Nomalアイコン Re[3]: デザイナのプロパティウィンドウで静的プロパティを選択したい / masa (20/09/19(Sat) 23:41) #34537 解決み!

All 上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信

Mode/  Pass/


- Child Tree -