コントロール、コンポーネントのプロパティをプロパティエディタから非表示にする - C#

コントロール、コンポーネントのプロパティをプロパティエディタから非表示にするコードを紹介します。

事前準備(サンプルプログラム)

以下のプログラムを作成します。

コンポーネント

下記のソースコードを記述して、コンポーネントを作成します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CustomButtonDemo
{
  public partial class CustomButton : Button
  {
    public CustomButton()
    {
      InitializeComponent();
    }

    public CustomButton(IContainer container)
    {
      container.Add(this);

      InitializeComponent();
    }

    protected override void OnClick(EventArgs e)
    {
      DialogResult dr = MessageBox.Show("本当によろしいですか?", "確認", MessageBoxButtons.YesNo);
      if (dr == DialogResult.Yes) {
        base.OnClick(e);
      }
      else {
      }
    }
  }
}

UI

下図のUIを準備します。


作成したコンポーネントであるCustomButtonとLabelをフォームに配置します。

コード

下記のコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CustomButtonDemo
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void customButton1_Click(object sender, EventArgs e)
    {
      label1.Text = "クリックされました。";
    }
  }
}

プロパティの非表示 (すでに実装されているプロパティ)

基底クラスなどで、すでにコンポーネントに実装されているプロパティを非表示にします。
今回は下図の"DialogResult"プロパティを非表示にします。


すでに実装されているプロパティを非表示にする場合は、新たに同名のプロパティを実装して、それを非表示にします。
    [Browsable(false)]
    [EditorBrowsable(EditorBrowsableState.Never)]
    public new DialogResult DialogResult
    {
      get
      {
        return base.DialogResult;
      }
      protected set
      {

      }
    }
のコードを記述します。"protected set"を含めたことで、プロパティエディタからの非表示だけでなく、コードでの値の設定もできなくなります。
"EditorBrowsable"はインテリセンスのコード補完での動作も禁止する設定のコードとなります。

修正後のコードは下記となります。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CustomButtonDemo
{
  public partial class CustomButton : Button
  {
    public CustomButton()
    {
      InitializeComponent();
    }

    public CustomButton(IContainer container)
    {
      container.Add(this);

      InitializeComponent();
    }

    [Browsable(false)]
    [EditorBrowsable(EditorBrowsableState.Never)]
    public new DialogResult DialogResult
    {
      get
      {
        return base.DialogResult;
      }
      protected set
      {

      }
    }

    protected override void OnClick(EventArgs e)
    {
      DialogResult dr = MessageBox.Show("本当によろしいですか?", "確認", MessageBoxButtons.YesNo);
      if (dr == DialogResult.Yes) {
        base.OnClick(e);
      }
      else {
      }
    }
  }
}

コンパイル後フォームデザイナで確認すると、"DialogResult"プロパティは非表示になっています。

プロパティの非表示 (このコンポーネントで実装したプロパティ)

コンポーネントで新たに実装したプロパティをプロパティエディタで表示しないよう設定する場合です。

コンポーネントにプロパティを追加し、以下のコードに変更します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CustomButtonDemo
{
  public partial class CustomButton : Button
  {
    string message = "本当によろしいですか?";

    public CustomButton()
    {
      InitializeComponent();
    }

    public CustomButton(IContainer container)
    {
      container.Add(this);

      InitializeComponent();
    }

    [Browsable(false)]
    [EditorBrowsable(EditorBrowsableState.Never)]
    public new DialogResult DialogResult
    {
      get
      {
        return base.DialogResult;
      }
      protected set
      {

      }
    }

    public string CheckMessage
    {
      set
      {
        message = value;
      }
      get
      {
        return message;
      }
    }


    protected override void OnClick(EventArgs e)
    {
      DialogResult dr = MessageBox.Show(message, "確認", MessageBoxButtons.YesNo);
      if (dr == DialogResult.Yes) {
        base.OnClick(e);
      }
      else {
      }
    }
  }
}

上記のコードをコンパイルし、CustomButtonのプロパティを確認すると、"CheckMessage"プロパティがプロパティエディタに追加されます。今回は、"CheckMessage"プロパティをプロパティエディタから非表示にします。


コンポーネントで実装されているプロパティをプロパティエディタで非表示にする場合は、
[Browsable(false)]
をプロパティの宣言部に記述します。

変更後のコードは下記になります。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CustomButtonDemo
{
  public partial class CustomButton : Button
  {
    string message = "本当によろしいですか?";

    public CustomButton()
    {
      InitializeComponent();
    }

    public CustomButton(IContainer container)
    {
      container.Add(this);

      InitializeComponent();
    }

    [Browsable(false)]
    [EditorBrowsable(EditorBrowsableState.Never)]
    public new DialogResult DialogResult
    {
      get
      {
        return base.DialogResult;
      }
      protected set
      {

      }
    }

    [Browsable(false)]
    public string CheckMessage
    {
      set
      {
        message = value;
      }
      get
      {
        return message;
      }
    }


    protected override void OnClick(EventArgs e)
    {
      DialogResult dr = MessageBox.Show(message, "確認", MessageBoxButtons.YesNo);
      if (dr == DialogResult.Yes) {
        base.OnClick(e);
      }
      else {
      }
    }
  }
}

コードをコンパイル後、フォームデザイナからプロパティエディタを確認すると、"CheckMessage"がプロパティエディタに表示されていないことが確認できます。


以上でコンポーネントやコントロールのプロパティをプロパティエディタから非表示にできました。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2024-01-06
作成日: 2014-10-27
iPentec all rights reserverd.