在Windows窗体上绘制多个自定义矩形控件的最快方法是什么

时间:2013-07-30 10:53:23

标签: c# windows winforms

背景

我正在c#.net中构建一个Windows应用程序(winforms)。主窗体需要显示仪表板控件,该控件基本上是资源调度程序。时间跨越底部。项目在y轴上运行。

我已经过去了ComponentGo Resource Scheduler用于此类事情,但这次我需要更多自定义。所以我想建立自己的。

  • 我需要能够在表单上绘制矩形。大小基于开始和结束时间。
  • 我需要能够完全为矩形着色,还需要半填充。 矩形需要上方和下方的标签/文字。
  • 我需要能够在矩形上捕获鼠标事件。鼠标移动,双击等。
  • 当显示的“时间”发生变化时,我需要能够重绘矩形 - 即向前移动,向后移动(底部的按钮)。

以下是所需布局的模型:

desired form layout

问题

  1. 我基于Panel创建了我的控件,这是一个好主意吗?
  2. 如何在面板边界外绘制文字?我可以直接绘制到Parent Canvas,但这感觉不对。
  3. 如何用颜色填充我的面板?
  4. 如何确保重绘顺利,快速。
  5. 目前我基本上有:

    public class MyControl : Panel
    {
         public MyControl()
         {
              CalcXPosition();
              this.SetBounds(this.Left, this.Top, myWidth, myHeight);
         }
    
         //... code omitted
    }
    

    但我不确定我是否会以最好的方式解决这个问题......任何帮助或评论都会非常感激。

    另外, 我需要每个矩形块都有与之关联的属性。 Block_ID,Block_Name等

1 个答案:

答案 0 :(得分:1)

1)我基于Panel创建了我的控件,是个好主意吗?

您可以使用Panel,也可以只使用Control。另一种选择是不使用每个类的控件,而只是在父画布上绘制矩形。无论哪种方式都有其优点和缺点。如果您不需要对如何绘制矩形进行大量控制,那么使用Controls可能比手动绘制矩形更容易。

2)如何在面板边界外绘制文字?我可以直接画到Parent Canvas,但这感觉不对。

选项1:使矩形控件更大一些,以便您可以在控件中调整文本。使每个矩形控件的背景透明(或与父画布相同的灰色阴影),并在控件的中间绘制彩色矩形。

选项2:将文本分开标签控件并将它们放在矩形控件上方。

3)如何用颜色填充面板一半?

使用控件的OnPaint事件在控件上的任何位置绘制颜色。

4)我如何确保我的重绘顺利而快速?

这取决于很多因素。得到一些东西并运行,如果它太慢,请发布另一个更具体细节的问题。