我想让一些控件(特别是:Button,Label和Panel)依赖于父级的大小。因此,按钮可能是父母宽度的0.1倍,高度的0.05倍,并且位于宽度的0.3倍和高度的0.2倍。 现在我有两个问题:
首先,我想将Control类的行为更改为一种“相对大小和相对位置” - Control。如果Control类有一个我可以覆盖的'onParentResized'方法,这将非常容易,但它没有。所以现在我的解决方案就是这个
class RelativeControl : Control
{
Control previousParent;
double relativeWidth, relativeHeight, relativeX, relativeY;
public RelativeControl(double RelativeWidth, double RelativeHeight, double RelativeX, double RelativeY)
{
// the arguments need to be between 0 and 1 normally, or the control is
// garanteed to be partially offscreen
this.relativeWidth = RelativeWidth;
this.relativeHeight = RelativeHeight;
this.relativeX = RelativeX;
this.relativeY = RelativeY;
}
protected override void OnParentChanged(EventArgs e)
{
if(previousParent != null)
{
previousParent.Resize -= new EventHandler(parentResized);
}
if(this.Parent != null)
{
this.Parent.Resize += parentResized;
}
this.previousParent = this.Parent;
}
private void parentResized(Object o, EventArgs e)
{
this.Width = (int)(this.Parent.Width * this.relativeWidth);
this.Height = (int)(this.Parent.Width * this.relativeHeight);
this.Location = new Point((int)(this.Parent.Width * this.relativeX), (int)(this.Parent.Height * this.relativeY));
}
}
这是一个很好的解决方案吗?
第二个问题:我想制作Button类(以及Panel和Label类)来扩展这个新版本的控件。但据我所知,这是不可能的。我唯一的选择似乎是制作3个类,并通过“标签”,“按钮”和“面板”逐字地找到并替换“控制”以获得我想要的结果。
我应该在这做什么?
答案 0 :(得分:0)
我认为你是在TableLayoutPanel控件之后。 令人高兴的是,在.NET平台上,不必再担心子控件调整大小或重新定位到父级。 您必须广泛使用子控件的Dock和Anchor属性。 您可以从链接开始,但网上有很多关于它们的教程。