2

から継承Company.UI.Formsするフォーム基本クラスがある名前空間があります。BaseFormSystem.Windows.Forms.Form

ExampleFormこのフォームのサイズを制限する必要があります。これにより、たとえば、から派生した具体的なフォームの場合BaseForm、VSデザイナービューではサイズが固定されている必要があります。固定サイズは、派生および設計者がそれを取得できるように、何らかの方法で(BaseFormctorで?)設定または定義する必要があります。ExampleForm

それは可能ですか?

[編集]目的は、基本クラスを、既知の画面サイズのWindows CEデバイスのフルスクリーンフォームのテンプレートとして使用することです。このために、デザイナーで子コントロールをレイアウトできるようにします。

4

4 に答える 4

3

標準の WinForms では、SetBoundsCore メソッドをオーバーライドできます。このコードは、設計時に基本クラスがそれを変更するのを防ぎます...しかし、継承されたクラスによってオーバーライドされる可能性があることを覚えておいてください:

protected override void SetBoundsCore(int x, int y,
     int width, int height, BoundsSpecified specified)
{
  if (this.DesignMode)
    base.SetBoundsCore(x, y, 500, 490, specified);
  else
    base.SetBoundsCore(x, y, width, height, specified);
}

設計時に指定したため、if を入れました。実行時にサイズ変更したくない場合は、それを削除します。

于 2009-06-24T12:46:17.383 に答える
2

わかりました、CF、簡単な解決策については、サイズをフィールドに格納することで、よりクリーンなコードを実行できます...

public BaseForm()
{
 InitializeComponent();
 this.Size=new Size(20,20);
}


bool resizing;

protected override void OnResize(EventArgs e)
{   
 if(!resizing)
 {
   resizing = true;
   try
   {
     this.Size = new Size(20, 20);
   }
   finally
   {
     resizing = false;
   }
 }
 else
   base.OnResize(e);
}
于 2009-06-24T12:58:58.153 に答える
1

このタイプのシナリオに対する直接的なサポートはないと思います。フォームの最大サイズを制御するすべての値は、子フォームによってオーバーライドできます。したがって、プロパティの観点からそれを制限する方法はありません。

私が考えることができる唯一の方法は、サイズ変更メソッドをオーバーライドし、サイズを超えた場合にサイズを最大サイズにリセットすることです。ただし、これにはいくつかの悪影響がある可能性があるため、解決策として解決する前に期限切れにする必要があります.

于 2009-06-24T12:33:02.310 に答える
0

ユーザーコントロールに「button1」という名前のボタンがあるとします。デザイン時にユーザーコントロールのサイズを変更しながら、ボタン1のサイズをユーザーコントロールのサイズに合わせる必要があります。

このソリューション作業プロパティ。

usercontrol の Resize イベントでこれを書きます。

 private void ButtonDesigned_Resize(object sender, EventArgs e)
    {            
        button1.Size = new Size(this.Size.Width - 2, this.Size.Height - 2); 

         // Note :  this.size hint to usercontrol size 

         or

        button1.Size = this.Size
    }

私の英語は苦手です。この解決策で十分です。

于 2013-04-16T22:24:53.050 に答える