1

私が作成している UserControl は、実行時には正常に動作しますが、デザイン モードではサイズ変更されません。

UserControl には、Control のサイズが変更されたときに塗りつぶすようにサイズ変更される画像の背景があります。うまく機能する図面。画像が伸びるという事実に対処するために、コンテンツを保持するパネルがあります。初期化中に、左、上、幅、高さの比率を保存します。( pnl.Left / this.Width など)

Resize イベント中に、コントロールの新しいサイズと保存した比率に基づいて、コンテンツ パネルを移動およびサイズ変更します。_contentDimensions は、比率を格納する構造体です。ReDimension は、コントロールを受け取り、新しいサイズに対する比率に基づいて移動/サイズ変更するメソッドです。

private void Control_Resize(object sender, EventArgs e)
{
    try
    {
        this.SuspendLayout();
        _contentDimensions.ReDimension(this.ClientSize, pnlContent);
    }
    catch { }
    finally
    {
        this.ResumeLayout(true);
    }
}

これは実行時に機能しますが、デザインタイム中に UserControl のサイズを変更すると、コンテンツ パネルのサイズが変更されません。

任意のヘルプをいただければ幸いです。前もって感謝します。

4

2 に答える 2

1

Control_Resize間違った場所から電話をかけている可能性があります。サイズ変更ロジックをオーバーロードに入れますOnSizeChanged

public partial class UserControl1 : UserControl
{
    public UserControl1()
    {
        InitializeComponent();
    }

    protected override void OnSizeChanged(EventArgs e)
    {
        base.OnSizeChanged(e);
        MessageBox.Show("Size Changed!");
    }
}

そのコントロールをテスト フォームに追加してサイズを変更しようとすると、Visual Studio で次のようになります。

ここに画像の説明を入力


補足として、ユーザー コントロールからthis.DesignModeを呼び出すと、ビジュアル スタジオでレンダリングされているかどうかがわかります。これは、ロード時に発生する遅い操作 (バックグラウンド スレッドでデータベースへのクエリを開始するなど) がある場合に役立ちます。これは、デザイン モードでは必要ありません。

于 2013-05-10T21:48:04.883 に答える