c# 界面编程 虚端子连接关系展示

本文记录了一位电气专业的程序员如何克服困难,学习并实现了一个简单界面项目的全过程。通过使用C#中的splitcontainer、treeview和panel控件,作者成功地创建了一个展示SCD文件内容和虚端子连接的界面。文章详细介绍了界面布局、滚动条显示及画布绘制等关键步骤,并分享了解决滚动条问题的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作为一个电气专业,半路出家写代码的我来说一直排斥做界面。抑郁的是,有个项目客户强烈要求界面展示,没办法开始着手看看界面编程,庆幸的是这个项目要求的界面展示还比较简单,只是静态展示、连接而已。花了一周时间做出来了,感觉还挺好玩的。


下面是运行的一个截图,

1、左边是一个SCD文件中所有的IED列表,右边是虚端子的连接关系展示;

2、中间的大框是一个IED,左边是本IED订阅的其他IED的GOOSE\SV信号,右边是本IED发布的GOOSE\SV信号;

3、点击IED之间的连线,弹出具体的虚端子连接详情,保护点名、注释、和点的值;

4、点击小矩形框,可以切换到小矩形对应的IED中。


在这里有关SCD文件解析的东西,就不做分享了,主要记录一下C#界面编程方面的知识点。

这里主要用到了一个splitcontainer控件、treeview控件、panel控件,绘画主要在panel控件上。

1、在某一个控件上绘画的时候,只需要重载该控件的paint方法;

2、获取控件的工作区域的矩形:

     获取Form1的大小用Rectangle Form1Rect = this.ClientRectangle;获取某个控件的大小:splitContainer1.Panel2.ClientRectangle;

3、设置控件的工作区域矩形:

      drawPanel.SetBounds(0, 0, splitContainer1.Panel2.ClientRectangle.Width, 5 * height / 4);

4、设置滚动条显示:

      panel的属性设置:Dock设置为none   Anchor设置为top、left(不能四个全部设置上就行,要不然滚动条怎么滚动啊)

      splitContainer1.Panel2的属性设置:AutoScroll设置为TRUE即可

      注意:这里有个小问题,困扰我很久,终于把它解决了。当你切换到一个panel的height比较大,splitcontainer.panel2上出现滚动条的情况下 ,如果将滚动条拉倒下面,然后再切换界面的时候,这时候虽然新界面的height没有超过form1的height,但是滚动条还是在,看着很烦。想了各种方法,最后找了一个很简单的方法就是重绘的时候设置滚动条的值为0即可。splitContainer1.Panel2.VerticalScroll.Value = 0;

5、接下来就是画布上绘画了:

Graphics g = e.Graphics;

//画矩形

SolidBrush SBrush = new SolidBrush(Color.FromArgb(196, 243, 196));//添加画刷

g.FillRectangle(SBrush, rectangle);//在指定的矩形区域,填充颜色

Pen pen = new Pen(Color.Gray, 2);//添加画笔

g.DrawRectangle(pen, rectangle);//画矩形框

//画线

g.DrawLine(pen, x + 5* width / 6, y + rowHeigh, x + 5 * width / 6, y + heigh);//定义两个点,根据定义好的笔,画线即可

//画文字

Font font = new System.Drawing.Font("宋体",12f);//设置字体

SolidBrush drawBrush = new SolidBrush(Color.Black); // Create brush.

RectangleF stringRect = new RectangleF(x, y, width, heigh);    // 设置文字显示的区域

StringFormat strForm = new StringFormat(); strForm.Alignment = StringAlignment.Center;//这里主要是设置文字的对齐方式,居中

g.DrawString(this.subiedinfo, this.Font, drawBrush, stringRect, strForm);


至于其他位置变化,矩形大小变化的设计,就依据项目具体实施了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值