ウィンドウコントロールのコンポーネントのスクロールバー表示をプロパティで切り替える - C#

ウィンドウコントロールのコンポーネントのスクロールバーの表示をプロパティで切り替えるコードを紹介します。

概要

ウィンドウコントロールのコンポーネントのスクロールバーの表示を実行時や設計時にプロパティで切り替えられるようにするためには、 スクロールバーを設定するプロパティを実装し、プロパティの切り替え時にUpdateStyles()メソッドを呼び出します。 また、CreateParams プロパティをオーバーライドし、スクロールバーの設定パラメーターに応じてStyleの値を設定します。

プログラム

UI

以下のUIを準備します。

コード

フォームのコードは以下です。
namespace WindowControlWithScrollBarChange
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      myComponent1.ScrollBars = MyComponent.ScrollBarsMode.None;
    }

    private void button2_Click(object sender, EventArgs e)
    {
      myComponent1.ScrollBars = MyComponent.ScrollBarsMode.Vertical;

    }

    private void button3_Click(object sender, EventArgs e)
    {
      myComponent1.ScrollBars = MyComponent.ScrollBarsMode.Horizontal;

    }

    private void button4_Click(object sender, EventArgs e)
    {
      myComponent1.ScrollBars = MyComponent.ScrollBarsMode.Both;
    }
  }
}

コンポーネントのコードです。
MyComponent.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Security.Permissions;
using System.Text;
using System.Threading.Tasks;

namespace WindowControlWithScrollBarChange
{
  public partial class MyComponent : Control
  {
    public enum ScrollBarsMode { None, Vertical, Horizontal, Both }

    private ScrollBarsMode scrollBarsMode;

    // window style constants for scrollbars
    public const int WS_VSCROLL = 0x00200000;
    public const int WS_HSCROLL = 0x00100000;

    public ScrollBarsMode ScrollBars {
      set
      {
        scrollBarsMode = value;
        this.UpdateStyles();
      }
      get
      {
        return scrollBarsMode;
      }
    }

    public MyComponent()
    {
      InitializeComponent();
    }

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

      InitializeComponent();
    }

    protected override CreateParams CreateParams {
      get
      {
        CreateParams cp = base.CreateParams;

        int ScrollBarFlag = 0;
        switch (scrollBarsMode) {
          case ScrollBarsMode.None:
            ScrollBarFlag = 0;
            break;
          case ScrollBarsMode.Horizontal:
            ScrollBarFlag = WS_HSCROLL;
            break;
          case ScrollBarsMode.Vertical:
            ScrollBarFlag = WS_VSCROLL;
            break;
          case ScrollBarsMode.Both:
            ScrollBarFlag = WS_HSCROLL + WS_VSCROLL;
            break;
        }

        cp.Style |= ScrollBarFlag;
        return cp;
      }
    }

  }
}

解説

ScrollBarsプロパティ

スクロールバーのモードを保持するScrollBarsプロパティを実装します。プロパティをセットした際に ウィンドウコントロールのスタイルを更新する必要があるため、 UpdateStylesメソッドを呼び出し、プロパティの値の変更をウィンドウコントロールに反映します。

CreateParamsプロパティのオーバーライド

CreateParamsプロパティをオーバーライドします。 getブロックでScrollBarsプロパティの値を確認し、値に応じてCreateParamsのStyleにWS_VSCROLL,WS_HSCROLLを追加します。

実行結果

起動すると以下の画面が表示されます。


ボタンをクリックするとスクロールバーの有り無しが切り替わります。



著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2011-11-10
iPentec all rights reserverd.