解决方案 »

  1.   

    DevComponents.DotNetBar2,有温度计,直接用阿,
      

  2.   

    我猜测,你只是将Label放置在了GroupBox中,刻度线的那些LineShape并没有。
    试图通过控制层的前后让GroupBox置于其同级父容器(这里是你的窗体)的LineShape之后的方法是徒劳的。所以,你必须选择好所有的LineShape连同Label一起放入GroupBox中。实际上,LineShape显示在界面上的并不是什么控件(窗口),而仅仅是一个绘制在其容器花布上的一个绘图罢了,所以,会出现上面的现象。建议使用GDI+绘图的方式构造你的温度计。
    例如,在GroupBox的Paint事件中:
       Graphics g = e.Graphics;
       g.DrawXXX;
    通过代码计算刻度的位置坐标并绘图。更进一步,建议你封装一个控件实现这个温度计。
    控件每次需要刷新显示都会调用Paint事件。
    你不妨为控件封装 MaxValue、MinValue及Value属性,
    在Paint事件的处理过程中,根据这些属性和控件的大小动态绘制刻度和液柱。
    你还可以封装一个警告值和报警值属性
    用绿色、黄色、红色表达温度的不同状态。
    Graphics 封装了丰富的绘图函数,使用画笔描述绘制图形的边框,使用画刷进行填充。
    希望你能做出漂亮的温度计。
      

  3.   

    嗯,补充一下。值或最大值最小值等属性改变时,可调用Refresh或Invalidate方法,触发Paint事件。
    因此,你只需要处理好Paint过程即可。
      

  4.   


    感谢你的回复 对我帮助很大 只是我还不是很会自己写空间和GDI之类的~差距有点大
      

  5.   


    感谢你的回复 对我帮助很大 只是我还不是很会自己写空间和GDI之类的~差距有点大呵呵,几乎所有人都经历过这些阶段.不过还是建议你尝试一下自己构造控件。这其实并不难。项目->添加用户控件,可以得到一个默认的控件UserControl1.cs
    添加一些代码构建一个属性,比如:
            //存储属性Value的值
            private Double m_value = 0;
            //属性Value
            public Double Value
            {
                get 
                {
                    return m_value;
                }
                set
                {
                    m_value = value;
                    this.Refresh();//值改变时,进行重绘。
                }
            }在用户控件内部的Paint事件里
            private void UserControl1_Paint(object sender, PaintEventArgs e)
            {
                int h =(int )( this.Height*m_value/100);//液柱的高度。假设100是最大值,显然你还要封装个最大值属性代替这个100才好。
                Rectangle r = new Rectangle(0, this.Height - h, this.Width-1, h-1);//这里计算你要画的液柱的范围,它与Value属性、最大值最小值以及当前控件的大小有关。
                Graphics g = e.Graphics;//获得画布。
                Brush b = new SolidBrush(Color.Red);//创建一个单色的画刷。  
                g.FillRectangle(b,r);//填充一个矩形。
                Pen p = new Pen(Color.Green, 1);//创建一个1像素宽的画笔。
                g.DrawRectangle(p, r);//绘制一个矩形外框。
            }
      

  6.   

    你可以把UserControl1拖拽到你的窗口中,你会在属性表里看到你自己设计的Value属性
    试着调整它,可以看到液柱随着值的变化而变化。
    再试着调整控件的大小,你会看到绘图也会进行响应比例的变化。
    然后,你继续完善这个控件就好了。