请教C#中如何在 WinForm中画曲线图

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教C#中如何在 WinForm中画曲线图相关的知识,希望对你有一定的参考价值。

软糖来回答罗。。。使用GDI+绘图技术即可。

首先引用System.Drawing命名空间。

给你绘制弧线、曲线和路线的参考代码:

Graphic 画纸 = Form1.CreateGraphics();
        public void 绘制弧线(Pen 钢笔, int X1, int Y1, int 宽, int 高, int 起始角, int 结束角)
         画纸.DrawArc(钢笔, X1, Y1, 宽, 高, 起始角, 结束角); 
        public void 绘制弧线(Pen 钢笔, Rectangle RECT, int 起始角, int 结束角)
         画纸.DrawArc(钢笔, RECT, 起始角, 结束角); 
        
        public void 绘制曲线(Pen 钢笔, Point[ ] 点组, float 张力)
         画纸.DrawCurve(钢笔, 点组, 张力); 
        public void 绘制曲线(Pen 钢笔, PointF[ ] 点组, int 偏移, int 段数)
         画纸.DrawCurve(钢笔, 点组, 偏移, 段数); 
        public void 绘制曲线(Pen 钢笔, PointF[ ] 点组, int 偏移, int 段数, float 张力)
         画纸.DrawCurve(钢笔, 点组, 偏移, 段数, 张力); 
        
        public void 绘制路线(Pen 钢笔, GraphicsPath 路线)
         画纸.DrawPath(钢笔, 路线); 
        public void 填充路线(Brush 画笔, GraphicsPath 路线)
         画纸.FillPath(画笔, 路线); 

另外要想不闪烁,请使用双缓冲技术:

namespace 引擎.绘图.GDI

    /// <summary>
    /// 为绘图提供双缓冲。提供建立多层画纸的方法并返回用于绘制的画纸。
    /// </summary>
    public class 画板
    
        private BufferedGraphicsContext M画板;
        private List<BufferedGraphics> M画纸;
        public int 画纸数  get; private set; 
        private int M当前号 = 0;
        public Graphics 当前画纸 ( )  return M画纸[M当前号].Graphics; 
        public Graphics 画纸 ( int 号 )  return M画纸[号].Graphics; 

        public Rectangle 显示矩形  get; set; 
        public int 高  get  return 显示矩形.Height;  
        public int 宽  get  return 显示矩形.Width;  
        /// <summary>
        /// 新建画板并关联到指定区域的画纸上
        /// </summary>
        /// <param name="关联画纸">关联的Graphic,通常为Form.CreateGraphics</param>
        /// <param name="关联矩形">关联的矩形区域,作为画板的工作区</param>
        /// <param name="层数">画板内含的缓冲区个数,不建议大于4个,默认为2个</param>
        public 画板 (Graphics 关联画纸, Rectangle 关联矩形, int 层数 = 2 )
         
            M画纸 = new List<BufferedGraphics>();
            M画板 = BufferedGraphicsManager.Current;
            显示矩形 = 关联矩形;           
            画纸数 = 层数;
            for (int i=1; i<=画纸数 ;i++)
            
               BufferedGraphics t画纸;
                t画纸 = M画板.Allocate(关联画纸, 显示矩形);
                M画纸.Add(t画纸);
            
            M当前号 = 0;
        

        public event Action 呈现事件;
        public void 引发呈现事件 ( )  if (呈现事件 != null)  呈现事件();  
        public void 呈现 ( )
         
            M当前号++;
            if (M当前号 > 画纸数 - 1)  M当前号 = 0;
            M画纸[M当前号].Render();
            引发呈现事件();
        
    

参考技术A 百度一下C# chart或者zedgraph

请教c# winform,权限设计问题

参考技术A 新增或者修改一个用户的时候。在
winform
中,怎么样使用2个ListBox
互移比如新增一个
新用户。

首先,加载窗体的时候,左边的ListBox列出所有的角色名。然后双击需要的角色,就移动到右边的ListBox中。然后点保存,就写入数据库中。

如果是修改一个用户的时候,加载窗体时,左边的ListBox只是列出未选的角色。右边的,则是列出
已选的角色
请教请教……[/Quote]
参考技术B 字段里用逗号是最愚蠢的设计,因为字符串处理是数据库的弱项,处理起来很麻烦,效率又低。应该设计成用户表Usersuid,uName1
张三
2
李四3
小明4
小李
用户权限表UserRoleuid
roleid1
21
32
12
22
3...角色表Roleroleid
rolename
parentRoleID1
主管
32
员工
13
经理
0其中parentRoleID定义上下级关系,缺点是查询时用到递归,比较麻烦,如果不需要可以不用角色权限表RolePermissionRid,新增权,修改权,删除权,..........N权1
1
1
12
1
0
03
1
0
1
也可以把权限单独做个表:Permissionpid
pname1
删除2
修改角色权限表就变成:rid
pid1
11
2...对于比较复杂的情况,还可以增加一个"实体"表:Entityeid
ename1
工资表2
签到表以及实体权限表EntityPermissionepid
eid
pid1
1
11
1
2...然后将角色和实体权限表建立一个多对多的映射表

以上是关于请教C#中如何在 WinForm中画曲线图的主要内容,如果未能解决你的问题,请参考以下文章

怎么在mfc中画曲线

如何利用Tkinter中Canvas绘制曲线图,请教高手

玩转贝塞尔曲线,教你在Unity中画Bezier贝塞尔曲线(二阶三阶),手把手教你推导公式

玩转贝塞尔曲线,教你在Unity中画Bezier贝塞尔曲线(二阶三阶),手把手教你推导公式

如何在origin中绘制多条曲线

如何用origin画3d曲线图