无法获得Control.OnPaint方法的工作

时间:2015-12-06 12:52:06

标签: c# winforms mdi onpaint

我根本找不到那样的东西(基本上所有其他问题总是出现语法问题)而且......好吧,情况有点复杂。为了避免使用500行代码我将在大多数情况下描述它:

我有一个表格,作为父母表格(MdiParent)和另一个表格,它是一个孩子,但基本上是一个功能齐全的表格本身。我在子窗体中使用了几种OnPaint方法,完美无缺,并且父Form上的3个自定义按钮也有自己的OnPaint方法。这三个按钮(实际面板)和父窗体上的每个其他控件都包含在PictureBox中,完全填充父窗体并用于通过TransparencyKey使父透明/点击的背景(havnt发现任何其他方式)。

问题是父母的每个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,并且havnt更改了TopMost FormBorderStyle ShowInTaskbar StartPosition以及color和trancparencyKey以外的任何默认设置,但我不认为它有任何东西。

2 个答案:

答案 0 :(得分:0)

myButtonObject1.FlatStyle设为FlatStyle.Standard

答案 1 :(得分: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