下面的代码显示了一个小型WinForms应用程序,其中包含一个绘制圆圈的简单控件.我试图了解该Control.Scale方法的行为.
如果我在Control from Main上调用Scale方法,如代码所示,它会正确缩放.但是,如果我改为从Circle的构造函数调用Scale,则不会发生缩放.
我在这里的困惑无疑表明我对Scale应该做什么有很大的误解.任何人都可以开导我吗?
using System;
using System.Windows.Forms;
using System.Drawing;
class Program
{
[STAThread]
public static void Main()
{
var circle = new Circle(Color.Orange)
{
Size = new Size(23, 23),
Location = new Point(50, 50)
};
circle.Scale(new SizeF(3.0f, 3.0f)); // <-- scaling here works
var form = new Form();
form.Controls.Add(circle);
Application.Run(form);
}
}
class Circle : Control
{
public Circle(Color color)
{
ForeColor = color;
// Scale(new SizeF(3.0f, 3.0f)); // <-- scaling here DOESN'T work
}
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.FillEllipse(new SolidBrush(ForeColor), ClientRectangle);
}
}
Run Code Online (Sandbox Code Playgroud)
Scale()方法并不意味着这样做.它是实现AutoScaleMode属性的辅助方法.当您的控件由窗体的InitializeComponent()方法创建时,使用SuspendLayout()暂停缩放.这就是为什么它对你的构造函数没有影响.创建表单句柄时应用AutoScaleMode属性值.这会取消您应用的任何缩放.
我认为你在OnPaint方法中寻找e.Graphics.ScaleTransform().它不会缩放控件,它会缩放绘图.如果您确实想要扩展控件,那么只需更改其Size属性即可.
| 归档时间: |
|
| 查看次数: |
4294 次 |
| 最近记录: |