gpt4 book ai didi

c# - 如何在 C# 中绘制面板?

转载 作者:太空狗 更新时间:2023-10-29 21:00:08 25 4
gpt4 key购买 nike

嘿,我需要用 C# 在面板上绘图,但没有将绘图代码放在“panel1_Paint”中,我该怎么做??顺便说一句,我正在使用 WinForms。

更新:我忘记说清楚了,我不需要将绘图代码放在绘画处理程序中,因为我需要根据按钮的事件开始绘图。

最佳答案

通常您在绘画事件处理程序中完成所有绘图。如果你想做任何更新(例如,如果用户点击面板)你必须推迟那个 Action :你存储所需的数据(用户点击的坐标)并强制重绘控件。这会导致触发 paint 事件,然后您可以在其中绘制之前存储的内容。

另一种方法是(如果您真的想在“panel1_Paint”事件处理程序之外绘制)在缓冲区图像内部绘制,然后将图像复制到绘制事件处理程序中的控件图形对象。

更新:

一个例子:

public class Form1 : Form
{
private Bitmap buffer;

public Form1()
{
InitializeComponent();

// Initialize buffer
panel1_Resize(this, null);
}

private void panel1_Resize(object sender, EventArgs e)
{
// Resize the buffer, if it is growing
if (buffer == null ||
buffer.Width < panel1.Width ||
buffer.Height < panel1.Height)
{
Bitmap newBuffer = new Bitmap(panel1.Width, panel1.Height);
if (buffer != null)
using (Graphics bufferGrph = Graphics.FromImage(newBuffer))
bufferGrph.DrawImageUnscaled(buffer, Point.Empty);
buffer = newBuffer;
}
}

private void panel1_Paint(object sender, PaintEventArgs e)
{
// Draw the buffer into the panel
e.Graphics.DrawImageUnscaled(buffer, Point.Empty);
}



private void button1_Click(object sender, EventArgs e)
{
// Draw into the buffer when button is clicked
PaintBlueRectangle();
}

private void PaintBlueRectangle()
{
// Draw blue rectangle into the buffer
using (Graphics bufferGrph = Graphics.FromImage(buffer))
{
bufferGrph.DrawRectangle(new Pen(Color.Blue, 1), 1, 1, 100, 100);
}

// Invalidate the panel. This will lead to a call of 'panel1_Paint'
panel1.Invalidate();
}
}

现在绘制的图像不会丢失,即使在重绘控件之后,因为它只绘制缓冲区(图像,保存在内存中)。此外,您可以在事件发生的任何时候绘制内容,只需将其绘制到缓冲区即可。

关于c# - 如何在 C# 中绘制面板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2611569/

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