【问题标题】:losing the shape i have drawn in windows form失去我在 Windows 窗体中绘制的形状
【发布时间】:2015-07-04 23:23:09
【问题描述】:

我有一个 Windows 窗体应用程序,在一个递归函数中,我使用“创建图形”方法在该窗体中绘制了一些形状,该函数多次调用自身,并且在每次调用中形状变得更加完整,但是当它完成调用并返回时到事件(按钮单击事件)我没有形状,它消失了,它消失了!我已经尝试了我想到的所有事情,我已经在点击事件或表单加载事件中初始化了图形对象但没有得到合适的结果,我还是没有形状。

【问题讨论】:

  • 这是预期行为,但没有您的代码,我无法告诉您如何修复它。你需要展示你的绘画方式。可能最好的做法是不要直接在控件上绘制,而是绘制到位图并使用图片框或面板来显示它。
  • 看来你得学习winforms绘图的基础知识了。很多地方都可以这样做..这里有一点关于what a Grahpics object isn't 即图形容器,这里是example of more advanced drawing..
  • 请参阅 here 了解 Gusman 建议的示例!
  • @ron beyer 非常感谢......我可以有你的电子邮件并将代码通过电子邮件发送给你吗?

标签: c# winforms recursion graphic


【解决方案1】:

不要直接使用位图作为缓冲区绘制到您的表单,然后将其设置为表单的背景。

每当绘制一个表单时,每个无效区域(需要重绘的脏区域)都将被完全重绘,因此如果您在每次 OnPaint 调用时不重绘您的形状,它将丢失。

正如我所说,为避免将表单的背景图片设置为空位图,而不是绘制到表单,而是绘制到您的位图,它将充当您的绘图的缓冲区。

【讨论】:

  • 我对windows窗体的绘画不太熟悉……你能给我举个例子吗?
  • bmp = new System.Drawing.Bitmap(800, 1000); g = Graphics.FromImage(bmp); mypen = new System.Drawing.Pen(Brushes.Black); this.AutoScroll = true; List<int> items=new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12,13,14,15,16 }; for (int i = 0; i <items.Count ; i++) { totalsum += items[i]; } this.Width += items.Count * linewidth; formwidth = this.Width - 60; draw(items, items, 0, 10); panel1.BackgroundImage = bmp;
  • 什么是draw?尝试将调用更改为draw(g, items, items, 0, 10); ,并在该方法标头中包含Graphics g,并使用它来绘制您似乎拥有的方法draw
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-16
  • 2017-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多