gpt4 book ai didi

c# - 自定义控件 onPaint 事件不起作用

转载 作者:行者123 更新时间:2023-11-30 17:12:23 24 4
gpt4 key购买 nike

大家好,我在编写自定义控件时遇到了问题。我的控件继承自 Windows.Forms.Control,我试图重写 OnPaint 方法。这个问题有点奇怪,因为只有当我在我的表单中包含一个控件时它才有效,如果我添加另一个控件然后第二个控件不会被绘制,但是 OnPaint 方法会被所有控件调用。所以我想要的是我所有的自定义控件都得到绘制,而不仅仅是我的代码:

如果运行代码,您会看到屏幕上只出现一个红色矩形。

public partial class Form1 : Form
{
myControl one = new myControl(0, 0);
myControl two = new myControl(100, 0);

public Form1()
{
InitializeComponent();
Controls.Add(one);
Controls.Add(two);
}

private void Form1_Load(object sender, EventArgs e)
{

}
}


public class myControl:Control
{
public myControl(int x, int y)
{
Location = new Point(x, y);
Size = new Size(100, 20);
}

protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);

Pen myPen = new Pen(Color.Red);
e.Graphics.DrawRectangle(myPen, new Rectangle(Location, new Size(Size.Width - 1, Size.Height - 1)));



}


}

最佳答案

我猜你正在寻找这样的东西:

e.Graphics.DrawRectangle(Pens.Red, new Rectangle(0, 0, 
this.ClientSize.Width - 1,
this.ClientSize.Height - 1));

您的 Graphic 对象用于控件的内部,因此使用 Location 在这里并不是很有效。坐标系从控件客户区左上角的 0,0 开始。

此外,您可以只使用内置的Pens 来绘制颜色,否则,如果您正在创建自己的"new"笔,请务必处理掉它们。

关于c# - 自定义控件 onPaint 事件不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10710247/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com