簡體   English   中英

C# WinForms 需要保證UserControl的大小

[英]C# WinForms Need to ensure UserControl size

我有從 UserControl 繼承的自定義控件。 我需要確保它是平方的。 所以,我需要這樣的東西:

int side = Math.Max(this.Width, this.Height);
this.Size = new Size(side, side);

但是我應該在哪里實現這個邏輯? 我無法在 OnResize 中執行此操作,因為它會導致遞歸調用並使設計模式下的 Visual Studio 或運行時的應用程序崩潰。

為了保持平方,我建議覆蓋OnLayout而不是OnResize ,當在表單設計器中或在運行時調整 UserControl 的大小時,可以多次調用后者。
OnLayout在第一次創建 UC 時被多次調用(它必須在初始化時多次設置大小)。

您還需要檢查 UserControl 的 Size 是縮小還是放大:

  • 如果 UC 放大,則將平方大小設置為Math.Max(Width, Height)
  • 如果 UC 縮小,則將平方大小設置為Math.Min(Width, Height)

您已執行此檢查,否則,當 - 例如 - 美國被放大時,您將無法將其調整為低於Max(Width)Max(Height) (即,當放大時,它永遠不會縮小)。

public partial class MyUserControl : UserControl
{
    int m_Squared = 0;

    public MyUserControl()
    {
        InitializeComponent();
        // Test with and without setting these
        this.MaximumSize = new Size(100, 100);
        this.MinimumSize = new Size(300, 300);
    }

    protected override void OnLayout(LayoutEventArgs e)
    {
        base.OnLayout(e);

        m_Squared = (this.Width > m_Squared || this.Height > m_Squared) 
                  ? Math.Max(this.Width, this.Height) 
                  : Math.Min(this.Width, this.Height);
        this.Bounds = new Rectangle(this.Location, new Size(m_Squared, m_Squared));
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM