【问题标题】:How to draw in runtime created DoubleBufferedPanel如何在运行时绘制创建的 DoubleBufferedPanel
【发布时间】:2013-08-08 16:11:06
【问题描述】:

我编写了一个用于绘制矢量基元的 C# 应用程序。对于绘图表面,我使用放置在 TabControl 中的 Draw.DoubleBufferedPanel。当我创建新项目时,会创建一个带有新 Draw.DoubleBufferedPanel 的新标签页。但是在用于溺水的按钮的单击事件中,我使用主要的 Draw.DoubleBufferedPanel,当我创建新选项卡时,我无法在其中绘制任何内容。我必须做什么才能在新创建的项目中绘图?

【问题讨论】:

  • 旁注:您需要在绘图处理程序中进行绘制。
  • 我知道。我为新的 DoubleBufferedPanel 添加了绘制处理程序,但它不起作用。我只能在与设计师一起创建的主选项卡中绘图。我的问题是,如果我创建了 5 个不同的选项卡并且我想绘制其中的任何一个,该怎么办?
  • 显示您的绘图代码的最小表示 - 特别是显示您如何引用您绘制的面板。
  • 我已经完成了绘画。现在下一个问题是,当我绘制一些东西时,我可以从每个选项卡中看到它。例如,如果我画圆圈,我可以从我创建的每个选项卡中看到它并对其进行操作。

标签: c# .net winforms graphics


【解决方案1】:

确保您的控制层次结构正确:

  • 主窗体
    • TabControl
    • 标签页1
      • MyDrawingControl1:MyDrawControl
    • 标签页2
      • MyDrawingControl2:MyDrawControl

然后在 MyDrawControl(而不是它的实例)的绘制处理程序中,您需要通过完整地保留剪裁来绘制它自己的表面(图形)。

更新:

可以在here 中找到有关如何实现执行某些自定义绘图的控件的信息。通常,您必须编写自己的类并从控件(或其后代之一,如 Button)继承并实现 OnPaint() 方法。在 OnPaint() 中,您可以使用 Graphic 进行绘制。该控件可以设置为 DoubleBuffered = true,以便 Winforms 自动在您的 OnPaint() 代码周围应用双缓冲。

【讨论】:

  • 是的,我知道。但是如何做到这一点?我的绘图处理程序代码是: Draw.DoubleBufferedPanel NewDrawArea = sender as Draw.DoubleBufferedPanel; eHandler.MouseDown(e.Location); NewDrawArea.Invalidate();
  • 您是否编写了自己的控件(类),例如上面的“MyDrawControl”并放置在每个Tab 页中?您能否发布一些代码,以便我们查看您目前所做的事情?
猜你喜欢
  • 1970-01-01
  • 2015-11-03
  • 2014-09-04
  • 1970-01-01
  • 1970-01-01
  • 2018-01-28
  • 2017-06-25
  • 2014-12-29
  • 1970-01-01
相关资源
最近更新 更多