[英]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 是縮小還是放大:
Math.Max(Width, Height)
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.