无法让 Control.OnPaint 方法在嵌套表单中工作

问题描述 投票:0回答:2

我根本找不到类似的东西(基本上 so else 中的每个问题总是语法问题)而且......,情况有点复杂。为了避免使用 500 行代码,我将对其大部分内容进行描述:

我有一个充当父表单(

MdiParent
)的表单和另一个作为子表单但基本上是一个功能齐全的表单。我在子窗体中使用了几个 OnPaint 方法,它们工作得很好,并且在父窗体上使用了 3 个自定义按钮,它们也有自己的 OnPaint 方法。这 3 个按钮(实际上是面板)和父窗体上的所有其他控件都包含在一个 PictureBox 中,该图片框完全填充了父窗体,并用于通过 TransparencyKey 使父窗体的背景透明/点击(尚未找到任何其他方法)这样做)。

问题是父级上的每个 OnPaint 方法根本不起作用(它们正在执行但不绘制任何内容)。

这里有一些代码,但这不是我想说的问题:

        this.myButtonObject1.BackColor = System.Drawing.Color.Red;
        this.myButtonObject1.Location = new System.Drawing.Point(840, 0);
        this.myButtonObject1.Name = "myButtonObject1";
        this.myButtonObject1.Size = new System.Drawing.Size(50, 50);
        this.myButtonObject1.TabIndex = 0;
        this.myButtonObject1.Click += new System.EventHandler(this.myButton1_Click);
        this.myButtonObject1.Paint += new System.Windows.Forms.PaintEventHandler(this.myButtonObject1_Paint);


    private void myButtonObject1_Paint(object sender, PaintEventArgs e)
    {
        Graphics g = e.Graphics;
        LinearGradientBrush lgb = new LinearGradientBrush(new PointF(0, 0), new PointF(myButtonObject1.Width, myButtonObject1.Height), Color.Green, Color.Lime);
        Pen p = new Pen(lgb, 5);
        g.DrawRectangle(p, myButtonObject1.Bounds);
        lgb.Dispose();
        p.Dispose();
    }

如果有人可以告诉我;我做错了什么?

PS:我使用的是.net 4.5,VS 2015,除了

TopMost
FormBorderStyle
ShowInTaskbar
StartPosition
和 ofc 颜色和 trancparencyKey 之外,没有更改任何默认设置,但我不认为与此有关系。

c# winforms mdi onpaint
2个回答
0
投票

更新

代码中的小错误是使用

Panel's Bounds
属性,该属性在运行时将引用其
Panel's Location
中的
Parent
!但绘图代码必须是相对于该对象的,而不是其父对象!

所以不要使用

Bounds
而是使用
ClientRectangle
并确保设置正确的
PenAlignment
:

using (LinearGradientBrush lgb = 
   new LinearGradientBrush(ClientRectangle, Color.Green, Color.Lime, 0f) ) //or some angle!
using (Pen p = new Pen(lgb, 5))
{
    p.Alignment = PenAlignment.Inset;
    g.DrawRectangle(p, ClientRectangle);
}

enter image description here


0
投票

myButtonObject1.FlatStyle
设置为
FlatStyle.Standard

© www.soinside.com 2019 - 2024. All rights reserved.