【发布时间】:2014-01-10 00:43:00
【问题描述】:
我做了一个自定义的可移动控件,但像素计算有问题。
控件大小为100、100,Padding和Margin均为0,0,0,0。
我认为从控件宽度(和高度)中减去笔宽两次就可以了,但是当我这样做时 DrawRectangle 中的底线和右线被部分或全部剪裁,具体取决于 pen.Width 的值和 size.Width size.Height 的减量因子
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
var pen = new Pen(Color.Black);
pen.Width = 16;
pen.Alignment = System.Drawing.Drawing2D.PenAlignment.Inset;
var brush = Brushes.Aquamarine;
var size = this.Size;
size.Width -= (int)(pen.Width * 2);
size.Height -= (int)(pen.Width * 2);
var rec = new Rectangle(this.Location, this.Size);
e.Graphics.FillRectangle(brush, rec);
e.Graphics.DrawRectangle(pen, rec);
}
无论选择什么 pen.Width 值,似乎 (90, 90) 点之外的整个图像都会被剪裁。
编辑:我刚刚发现,当 control.Location 设置为 (0, 0) 时,不会发生 unwatned 剪辑。
public partial class Form1 : Form
{
MTC control;
public Form1()
{
InitializeComponent();
control = new MTC();
control.Parent = panel1;
control.Width = 100; control.Height = 200;
//control.Left = 100; control.Top = 100;
control.Location = new Point(0, 0);
panel1.Controls.Add(control);
【问题讨论】:
-
绘画相对于控件的客户区。因此,您必须使用
var rec = new Rectangle(Point.Empty, size);
标签: c# winforms user-controls