winform在窗体初始化时绘制控件一直绘制不上问题
最近在做一个功能,大概是:点击单元格,然后打开一个窗体,在窗体打开时,要把单元格中的内容绘制在窗体的picturebox控件上。
我在构造函数,load、actived、shown等事件中都绘制试了,但窗体打开后还是没有绘制的内容。又试了网上说的重写onpaint方法,在里面绘制也不行;以及条用picturebox的Invalidate强制重绘,但发现pic控件可以了,其他控件都空白了。
最后直接上成功的代码:
在控件的paint事件里绘制,需要注意的是绘制的画板要用事件里带的那个参数。
//绘制已有的轴线 private void picView_Paint(object sender, PaintEventArgs e) { try { graView = e.Graphics; BllJsonNote jsonNote = BllNote.GetCellJsonNote(_cell.Owner, _cell.Col, _cell.Row, _cell.Sheet); if (jsonNote != null && jsonNote.U != null && jsonNote.U.Count > 0) { if (jsonNote.U.ContainsKey("axisinfo")) { if (!string.IsNullOrEmpty(jsonNote.U["axisinfo"])) { string str = jsonNote.U["axisinfo"]; string axisJson = StringHelper.GetValueFromBase64(str); AxisInfo ai = JsonConvertHelper<AxisInfo>.DeserializeJsonNote(axisJson); if (ai != null) { myFont = ai.AxisFont; txtAxis.Font = myFont; //设置画笔 if (myFont.Style == FontStyle.Bold) { pen = new Pen(Color.Black, 2); } //设置画圈的直径和每行的高度 circelWidth = myFont.Size + 12; yUnit = myFont.Size + 14; switch (ai.HorAlignMent) { case "left": rbHorizon_left.Checked = true; break; case "right": rbHorizon_right.Checked = true; break; } switch (ai.VerAlignMent) { case "top": rbVertical_top.Checked = true; break; case "bottom": rbVertical_bottom.Checked = true; break; } txtAxis.Text = ai.AxisText; } } } } graView = this.picView.CreateGraphics(); } catch (Exception ex) { Log4NetHelper.ErrorLog(this.GetType(), "绘制出错," + ex.Message + Environment.NewLine + ex.StackTrace); } }