【发布时间】:2010-08-13 16:05:57
【问题描述】:
我正在开发一个 C# .NET 自定义控件,我想防止用户在设计模式下调整高度,同时允许他们调整宽度。
【问题讨论】:
标签: c# .net user-controls
我正在开发一个 C# .NET 自定义控件,我想防止用户在设计模式下调整高度,同时允许他们调整宽度。
【问题讨论】:
标签: c# .net user-controls
我知道这个问题有点老了,但以防万一有人寻找这个问题,我会尝试回答:
您必须在您的用户控件中覆盖SetBoundsCore 方法。像这样的:
protected override void SetBoundsCore(
int x, int y, int width, int height, BoundsSpecified specified)
{
// EDIT: ADD AN EXTRA HEIGHT VALIDATION TO AVOID INITIALIZATION PROBLEMS
// BITWISE 'AND' OPERATION: IF ZERO THEN HEIGHT IS NOT INVOLVED IN THIS OPERATION
if ((specified & BoundsSpecified.Height) == 0 || height == DEFAULT_CONTROL_HEIGHT)
{
base.SetBoundsCore(x, y, width, DEFAULT_CONTROL_HEIGHT, specified);
}
else
{
return; // RETURN WITHOUT DOING ANY RESIZING
}
}
【讨论】:
您是否尝试设置MinHeight 和MaxHeight 属性?
【讨论】:
尝试使用“DesignMode”属性,这表明您处于设计模式,即来自 UI 设计器模式。 (见MSDN)。
public int Height()
{
get { ... }
set
{
if (this.DesignMode) return;
else this.myHeight = value;
}
}
【讨论】:
// Override SetBoundsCore method to set resize limits
//这段代码将高度固定为20,其他属性可以更改
protected override void SetBoundsCore(int x, int y,
int width, int height, BoundsSpecified specified)
{
// Set a fixed height for the control.
base.SetBoundsCore(x, y, width, 20, specified);
}
【讨论】: