在组框内使用 WinForm Paint 事件

Using WinForm Paint event inside groupbox

我正在尝试将此 C++ MFC 应用程序移植到 C# WinForm 中。这是一项正在进行的工作。基本上,我想在组框区域做一些绘图:

我在表单中添加了一个 Paint 处理程序来完成我的工作:

private void FullColourPaletteForm_Paint(object sender, PaintEventArgs e)
{
    // Do painting with e.Graphics
}

我惊讶地发现它没有显示我的渲染。但是,后来我意识到在 Winform 中它不被称为 groupbox 而是 container。所以,我将容器设置为不可见,可以理解我的渲染(虽然不太正确)现在可见:

我应该如何在容器区域内进行绘画?

这是为什么呢?我所做的只是添加:

private void groupBox1_Paint(object sender, PaintEventArgs e)
{
    base.OnPaint(e);
}

现在我的表格画是可见的。

每个 window(控件、表单等)都有自己的绘画,并且儿童通常会从该绘画中剪裁(排除)。

如果你想在 GroupBox(或任何控件)内部绘制,你应该在相应的控件(GroupBox 在你的情况下)Paint 事件中处理它,而不是形式一.

private void groupBox_Paint(object sender, PaintEventArgs e)
{
    var area = groupBox.DisplayRectangle;
    // Draw inside the area
    e.Graphics.FillRectangle(Brushes.Green, area);
}