c#上位机开发
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#上位机开发相关的知识,希望对你有一定的参考价值。
我的专业是电科,以后想从事上位机编程的工作,我想以后工作就是以下四个方向的结合:
1.通讯:上位机和下位机的通讯,通过usb、网口,实现上位机向下位机发送数据;
2.界面:上位机的设计离不开界面,
3.数据处理:我对数据的处理要求不高,主要是解析一些数据。
我想用C#语言 在VS2010平台上编写 刚工作基本没基础 跪求可以参考的书 谢谢啦!
2、界面是C#的基础东西,主要与美工和C#控件有关。
3、数据也没什好说的,主要是跟基础的数据类型比如数组、byte之类打交道,涉及通讯的时候对这些知识以及进制之类转换一定要熟。
4、一般也会涉及到数据库和多线程,数据库一般是以access和sql server居多。
这些其实都算是c#的基础知识(除了socket之外),一般入门的书就是《C#入门经典》,基本上学完就差不多了,涉及界面美化的时候很可能会用到photoshop,有时间也要学一下。追问
我现在就想要一个完整的列子 从加入控件开始 然后给每个控件修改参数、写事件,简单的也可以,网上找了好多书 找不到想要的~
追答这种东西先不说有没有,即使找到也没任何意义,没基础你怎么看的懂,老老实实去学上面那本书,学的差不多自然就知道了。
参考技术A 你的C#现在是不是很厉害了呀,我这两天想用C#做一个上位机。刚入门,希望给点建议。C#上位机开发——SerialAssistant界面升级(WinForm界面布局进阶)
前言
早在18年,博主第一次开始写博客,内容为 C# 上位机开发,写完后收获了不错的阅读量和好评:
- C#上位机开发(一)—— 了解上位机
- C#上位机开发(二)—— Hello,World
- C#上位机开发(三)—— 构建SerialAssistant雏形
- C#上位机开发(四)—— SerialAssistant功能完善
这个系列存在的问题就是没有进行界面布局,所有的控件都是固定位置,所以时隔多年,再次利用空闲时间学习WinForm如何进行界面控件布局。
Github开源仓库:https://github.com/Mculover666/SerialAssistant。
一、使用Anchor属性进行布局
1. Anchor属性
Anchor意味锚点,可以将控件设置到某个固定的位置,随着窗口大小的改变,控制在窗口中的相对位置不变。
2. 演示示例
① 控件位于右上角/左上角/右下角/左下角
设置Anchor属性锚点在上侧和右侧,意味着控件相对于父控件,上侧和右侧的位置不变:
运行效果如下:
② 控件水平居中/垂直居中
首先将控件放置于水平居中位置:
点击后控件自动位于水平居中位置,接着设置Anchor属性,取消左右锚点,只设置上侧锚点:
这样控件一直位于水平居中位置:
同理,控件垂直居中只需要设置左侧或者右侧的锚点,取消上侧和下侧的锚点即可。
控件水平垂直都居中只需要取消上下左右所有的锚点即可。
③ 控件水平拉伸/垂直拉伸
设置Anchor属性,设置上侧锚点以及左右锚点:
演示效果如下:
二、使用Dock属性进行布局
1. Dock属性
Dock意味停靠,可以将控件停靠到某一侧或者中央。
2. 演示示例
① 使面板(Panel)停靠在某一侧(上/下/左/右/中)
在窗口中添加一个Panel,此时Panel的父控件是窗口(From),为了方便查看Panel的大小和位置,先给panel设置一个背景颜色,然后设置 Dock 属性为上侧停靠:
运行结果如图:
同样,可以设置其停靠在上/下/左/右中的某一侧。
设置为中间(Fill)时,会将整个父控件填满:
② 多个panel使用Dock布局
按照panel1至panel5的顺序依次添加panel,并设置Dock属性,如图:
因为panel4的添加在panel2和panel3之后,所以就添加在了剩余空间的底部。
如果换一种顺序添加,则又是另一种效果,如图:
所以在使用Dock属性时,一定要注意添加控件的先后顺序。
当界面大小变化时:
- 停靠在左右侧的控件:长度不变,高度会动态拉伸;
- 停靠在上下侧的控件:长度会动态拉伸,高度不变;
- 停靠在中心的控件(Fill):会填充整个空白区域;
窗口大小动态变化效果如图:
三、嵌套布局
在实际软件开发的时候,如果使用布局器,我们应该按照从大往小的思路来布局,注意两点即可:
① Anchor属性和Dock属性是相对父控件而言的,所以可以进行嵌套;
② Anchor属性和Dock属性只能二选一,不能同时使用。
接下来我们以串口助手为例,设计一个界面。
1. 区域划分设计
界面设计需求为:
- 状态栏:窗口变化时固定在底部不动;
- 左侧串口设置界面、接收设置界面、发送设置界面:窗口变化时,固定在左侧不动;
- 右侧串口发送区:窗口变化时,可以跟随右侧伸长,但高度不变;
- 右侧串口接收区:窗口变化时,可以跟随右侧和下侧伸长,填充整个空白区域;
2. 设计思路与实现
2.1. 最顶层的三个大区划分
首先划分为三个大块:
接着分别在panel2中嵌套,组合出设置界面;在panel3中嵌套,组合出发送数据和接收数据界面。
实现如下:
窗口动态变化时,效果如下:
2.2. 左侧设置区设计
左侧设置区分为三个区:串口设置区,接收设置区,发送设置区。
特别说明:串口设置区,接收设置区,发送设置区应该使用GroupBox控件,可以在左上角显示名称,效果要优于使用panel,效果如图:
这三个区在界面动态变化时并不需要变化,所以简单添加三个Panel即可,默认会设置Anchor属性为左上。
窗口动态变化时界面效果如图:
2.2.1. 串口设置区界面
串口设置区中只有Label和ComboBox,在界面动态变化时并不需要变化,所以简单的拖放即可,默认会设置Anchor属性为左上。
在设计对齐的时候可以借助设计器提供的对齐工具来完成:
2.2.2. 接受设置区界面和发送设置区界面
同理,拖放就OK。
2.3. 右侧数据区设计
右侧数据区包括串口接收数据区和串口发送数据区,在之前设计绿色这块窗口时,已经设置了相对于父控件(窗口Form)的Dock属性为Fill,所以在动态变化时,绿色窗口会永远填满窗口。
2.3.1. 右侧数据区划分
在一些场景下,我们也需要将串口发送数据区放大一点,这个时候就需要用到splitContainer这个容器,它提供了动态的两个Panel,但是两个panel间分离,可以由用户调整大小。
拖入一个该控件放入绿色框中,填满整个区域,设置属性为垂直分离:
再分别给内部的panel1和panel2设置不同的颜色,运行程序,可以看到效果:
放大之后再看效果,简直完美:
用户改变两个缓冲区的大小:
实验完毕后,取消两个内置panel的颜色,接着下面的设计:
2.3.2. 串口数据接收区
串口数据接收区使用TextBox,并开启多行显示:
接着拖动TextBox的大小,填满整个父控件(内置Panel1),然后设置Anchor属性为上下左右:
2.3.3. 串口数据发送区
串口数据发送区使用TextBox,并开启多行显示,同时还要再设置一个发送按钮,再添加一个comboBox用于记录历史发送。
拖放好发送按钮的位置,设置为只向右侧相对位置不变:
然后再拖放好TextBox的位置,设置Anchor属性为上下左右都不变,这样当窗口变化时,TextBox就会拉伸填充了:
最后拖放好ComBox的位置,设置Anchor属性为左侧、右侧、下侧有锚点,这样当窗口变化时,可以跟随底部变化,并且进行水平拉伸:
至此,串口助手界面搞定,查看一下效果:
最大化窗口,看看效果:
非常完美!
再修改属性,显示滚动条:
另一个发送文本框操作同理。
2.4. 底部状态栏设计
底部状态栏设计的信息主要有:
- 当前状态
- 接收字节数
- 发送字节数
- 作者信息
- 版本信息
其中状态信息单独设置一个panel,里面用标签Label即可,设置Dock属性在Left即可;
版本信息也单独设置一个panel,里面添加一个linkLabel,设置Dock属性在Right即可;
接收字节数和发送字节数统一放在一个panel中,panel设置Dock属性为Fill:
至此,串口助手设置完成。
以上是关于c#上位机开发的主要内容,如果未能解决你的问题,请参考以下文章
C#上位机开发——SerialAssistant界面升级(WinForm界面布局进阶)
用C#语言开发上位机(来控制下位机比如了解下位机测量的温度湿度压力并控制下位机)要用到啥知识?
C#上位机开发——SerialAssistant功能优化(串口自动扫描功能接收数据保存功能加载发送文件发送历史记录打开浏览器功能定时发送功能)