110,539
社区成员
发帖
与我相关
我的任务
分享
public class 放大缩小Behavior
{
public 放大缩小Behavior(Control ctrl, Control reference)
{
this.InitValue = new Rectangle(ctrl.Left, ctrl.Top, ctrl.Width, ctrl.Height);
this.InitRefValue = new Rectangle(reference.Left, reference.Top, reference.Width, reference.Height);
this.Target = ctrl;
this.Reference = reference;
reference.Resize += Reference_Resize;
}
Rectangle InitValue;
Rectangle InitRefValue;
Control Target;
Control Reference;
private void Reference_Resize(object sender, EventArgs e)
{
var p = this.Reference.Width / (double)this.InitRefValue.Width;
Target.Left = (int)(this.InitValue.Left * p);
Target.Width = (int)(this.InitValue.Width *p);
p = this.Reference.Height / (double)this.InitRefValue.Height;
Target.Top = (int)(this.InitValue.Top * p);
Target.Height = (int)(this.InitValue.Height * p);
}
}
这里在初始化的时候把控件的原始尺寸位置记录下来,然后当“参照物”的 Resize 事件发生时,按照比例改变目标控件的大小位置。
那么在一个窗口的初始化事件中写private void Form1_Load(object sender, EventArgs e)
{
new 放大缩小Behavior(this.textBox1, this);
new 放大缩小Behavior(this.listBox1, this);
}
你想让哪一个控件锚上窗体的Resize,就调用一次这个 Behavior 类型,创建一个行为对象实例,行为就会起作用!