我正在使用分层表单,我在 Visual Basic .NET 中找到了一个很好的示例,但在将源代码转换为 C# 时遇到了问题。Visual Basic.NET 实现使用 shadows 修饰符来有效地替换 Form Class 的Invalidate()方法,然后对 Paint 事件执行相同的操作。
公共阴影事件绘制(ByVal G As Drawing.Graphics)
Public Shadows Sub Invalidate()
Dim B As New Drawing.Bitmap(ClientSize.Width, ClientSize.Height)
Dim G As Drawing.Graphics = Drawing.Graphics.FromImage(B) : G.SmoothingMode = Drawing.Drawing2D.SmoothingMode.AntiAlias
RaiseEvent Paint(G)
G.Dispose()
SetBits(B)
B.Dispose()
End Sub
我将代码转换为 C#,如下所示:
public new event PaintEventHandler Paint;
public new void Invalidate()
{
Bitmap b = new Bitmap(ClientSize.Width, ClientSize.Height);
Graphics g = Graphics.FromImage(b);
g.SmoothingMode = SmoothingMode.AntiAlias;
Paint(this, new PaintEventArgs(g, Rectangle.Empty));
g.Dispose();
SetBits(b);
b.Dispose();
}
但是当调用该方法时,我收到NullReferenceException - 对象引用未设置为对象的实例。
我也尝试了不同的实现,但收到了相同的异常。
public delegate void PaintEventHandler(Graphics g);
public event PaintEventHandler Paint;
有人可以告诉我我做错了什么吗?谢谢。