none
TextBoxコントロールのSizeプロパティについて RRS feed

  • 質問

  • はじめまして、よろしくおねがいします。

    TextBoxを貼りつけたユーザーコントロールを別フォームに貼付け、デザイナ上でTextBoxの上下左右、角にある白い□のドラッグアンドドロップにより、高さ/幅のサイズを変更できますが、この白い□をNumericUpDownのように、左右のみにして、幅だけ設定させたいです。

    ユーザーコントロール側でSizeプロパティを隠蔽すると、左上の□だけが残る状態になり、実現したい内容ではありません。

    どうすれば実現可能なのか、ご教授お願いします。

    2010年5月27日 2:36

回答

  • デザイナー上でのグリフの制御でしたら、DesignerAttribute を使えば良さそうです。

    ControlDesigner から派生したクラスを作成し、SelectionRules を override します。
    そして、そのクラスを DesignerAttribute にて対象のコントロールに付加します。

    以下はサンプルです。

    // 参照設定に System.Design を追加。
    using System.Windows.Forms.Design;
    
    [Designer(typeof(UserControl1Designer))]
    public partial class UserControl1 : UserControl
    {
      public UserControl1()
      {
        InitializeComponent();
      }
    }
    
    public class UserControl1Designer : ControlDesigner
    {
      public override SelectionRules SelectionRules
      {
        get
        {
          return
            SelectionRules.Moveable
            | SelectionRules.RightSizeable | SelectionRules.LeftSizeable;
        }
      }
    }
    • 回答としてマーク hahuhahuhahu 2010年5月27日 6:42
    2010年5月27日 6:16

すべての返信

  • 自己レスです。環境は下記の通りです。

    Visual Studio 2008 : Visual C# 

    .NET Framework 2.0

    2010年5月27日 2:45
  • TextBoxを貼りつけたユーザーコントロールを別フォームに貼付け、デザイナ上でTextBoxの上下左右、角にある白い□のドラッグアンドドロップにより、高さ/幅のサイズを変更できますが、この白い□をNumericUpDownのように、左右のみにして、幅だけ設定させたいです。

    ユーザーコントロール側でSizeプロパティを隠蔽すると、左上の□だけが残る状態になり、実現したい内容ではありません。

    どうすれば実現可能なのか、ご教授お願いします。


    ユーザーコントロールの OnResize メソッドをオーバーライドすれば可能だと思われます。たとえばこんな感じ。高さを 60 に固定しています。

    public partial class UserControl1 : UserControl {
    
      int _height = 60;
    
      public UserControl1() {
        InitializeComponent();
      }
    
      protected override void OnCreateControl() {
        base.OnCreateControl();
        _height = this.Height;
      }
    
      protected override void OnResize(EventArgs e) {
        base.OnResize(e);
        this.Height = _height;
      }
    }

    ひらぽん http://d.hatena.ne.jp/hilapon/
    2010年5月27日 3:54
    モデレータ
  • デザイナー上でのグリフの制御でしたら、DesignerAttribute を使えば良さそうです。

    ControlDesigner から派生したクラスを作成し、SelectionRules を override します。
    そして、そのクラスを DesignerAttribute にて対象のコントロールに付加します。

    以下はサンプルです。

    // 参照設定に System.Design を追加。
    using System.Windows.Forms.Design;
    
    [Designer(typeof(UserControl1Designer))]
    public partial class UserControl1 : UserControl
    {
      public UserControl1()
      {
        InitializeComponent();
      }
    }
    
    public class UserControl1Designer : ControlDesigner
    {
      public override SelectionRules SelectionRules
      {
        get
        {
          return
            SelectionRules.Moveable
            | SelectionRules.RightSizeable | SelectionRules.LeftSizeable;
        }
      }
    }
    • 回答としてマーク hahuhahuhahu 2010年5月27日 6:42
    2010年5月27日 6:16
  • ひろぽんさん、ありがとうございました。

    その方法でも制限はできるのですが、どうしてもNumericUpDownに近づけたい次第でした。

     

    TH01さん、ありがとうございました。

    まさに実現したかった動きになりました。これで行きたいと思います。

    2010年5月27日 6:42