我根本找不到那样的东西(基本上所有其他问题总是出现语法问题)而且......好吧,情况有点复杂。为了避免使用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以外的任何默认设置,但我不认为它有任何东西。
答案 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);
}