FormGraphicsNotSetonFormLoad我的表单有一个包含两个重叠矩形的组框。窗体的其他控件是两组,每组四个数字向上和向下控件,用于设置矩形的颜色。(nudF1、2、3和4设置前矩形,nudB1、2、3和4设置后矩形。)一切正常,除了当表首先加载。数字向上控件的ChangeValue事件调用ShowColors()方法。窗体的Load事件调用csColorsForm_Load()方法。有什么建议?}privatevoidcsColorsForm_Load(objectsender,EventArgse){this.BackColor=System.Drawing.Color.DarkBlue;SetColors(发件人,e);}privatevoidSetColors(objectsender,EventArgse){Controlcontrol=(Control)sender;StringctrlName=control.Name;图形objGraphics;矩形rect1,rect2;intcolorBack,colorFore;objGraphics=this.grpColor.CreateGraphics();//如果调用控件不是前景色控件,绘制背景色矩形if(ctrlName.Substring(0,4)!="nudF"){colorBack=int.Parse(SetColorsB("nudB"),NumberStyles.HexNumber);SolidBrushBrushB=newSolidBrush(Color.FromArgb(colorBack));rect1=newRectangle(this.grpColor.Left,this.grpColor.Top,this.grpColor.Width,this.grpColor.Height);objGraphics.FillRectangle(BrushB,rect1);}//始终绘制前景色矩形colorFore=int.Parse(SetColorsB("nudF"),NumberStyles.HexNumber);SolidBrushBrushF=newSolidBrush(Color.FromArgb(colorFore));rect2=newRectangle(this.grpColor.Left,this.grpColor.Top,this.grpColor.Width,this.grpColor.Height);objGraphics.FillRectangle(BrushF,rect2);objGraphics.Dispose();}privatestringSetColorsB(stringnam){stringtxt="";for(intn=1;n<=4;++n){varud=Controls[nam+n]asNumericUpDown;inthex=(int)ud.Value;txt+=hex.ToString("X2");}returntxt;}privatevoidbtnClose_Click(objectsender,EventArgse){this.Close();}}}我怀疑在Load事件中绘画还为时过早尝试在Paint事件中绘画。要么:你可以使用一些Panel控件,并设置背景颜色吗?当Windows向它发送WM_PAINT消息时,像任何控件一样,groupbox将自行绘制。您确实可以使用Control.CreateGraphics()来绘制自身,绕过正常的绘图逻辑。但是,当Windows决定需要重新绘制控件时,这不会持续下去。随机消失。当您最小化表单并恢复它时,这一点很明显。在启用Aero的Vista和Win7上不太明显,当您的表单与另一个窗口重叠时,它不需要重新绘制。但在XP或禁用Aero时会很明显。你不能让它可靠地工作,你必须使用Paint事件。不是你的表单,组框控件'。调用它的Invalidate()方法强制它在颜色改变时重新绘制。以上是C#学习教程:窗体加载时不设置窗体。侵权请点击右侧联系管理员删除。如需转载请注明出处:
