一、实物硬件表拟定
笔记本电脑、正运动控制器、三个汇川伺服驱动器、三个滑动模组
二、软件开发
注意细节:
①主界面使用三个panel容器进行构建
pannel容器设置属性参数:(1) dock
② 添加自定义控件:首先创建类库,删除默认文件后,增加自定义控件;同时在自定义控件中进行增加属性,以便在主窗体中直接修改自定义属性;添加图片资源方式:属性->添加现有文件
快捷方式:propfull->直接创字段和对应的属性
1. 创建winform窗体程序
1.1.窗体参数设置如下:
① 修改窗体size属性,设置为1366,760
② 修改formbodystyle属性,选择none,即“无边框”
1.2.插入三个panel容器:
① 菜单panel:size属性设置为1366,80;dock属性设置为top;backcolor属性设置为blue;
其中dock属性可以控制 控件布局位置
② 显示panel:size属性设置为1366,640;dock属性设置为fill;
③ 底部panel:size属性设置为13866,40;dock属性设置为buttom,backcolor属性设置为blue;
以上窗体参数设置好以后,如图所示:
2. 创建自定义用户控件(方便后期项目直接进行调用)
2.1. 创建自定义控件
① 解决方案->新建类库, 在新建的类库文件下创建自定义控件
2.2. 创建资源图像文件夹
在classliabrary项目下创建“resource”文件夹,同时在该文件下存放一张图像,并点击生成项目
2.3. 添加label和picturebox控件
在自定义控件上添加一个picturebox控件和label控件(图像位于自定义控件的上部分,label位于自定义控件的下部分),并选择resource文件夹中添加的图像
2.4.给自定义属性添加属性参数
① 增加“自定义控件名字”和“自定义控件图像”两个属性参数
private string buttonname="主界面";public string Buttonname{get { return buttonname; }set { buttonname = value;this.label1.Text = buttonname;
}}private Image image=Properties.Resources._1_removebg_preview;public Image backimage{get { return image; }set { image = value;this.pictureBox1.Image = backimage;}}
添加完成属性程序以后,点击项目生成;当在其他界面插入自定义控件时,其对应的“backimage”和"buttonname"属性会出现控件属性列表中
② 增加控件是否被激活属性
通过isactive属性来控制自定义控件显示的状态,如果自定应控件的isactive属性修改,都会触发onpaiter函数,对控件显示进行重写绘制;目前指定的规则是当isactive属性被设置为true,则自定义属性底部被画上一个白色矩形
private bool isbutactive;[Browsable(true)][Category("自定义属性")][Description("激活按钮")]public bool Isbutactive{get { return isbutactive; }set {isbutactive = value;this.Invalidate();}}private Color activeColor = Color.FromArgb(137, 207, 240);[Browsable(true)][Category("自定义属性")][Description("激活方块颜色")]public Color ActiveColor{get { return activeColor; }set{activeColor = value;this.Invalidate();}}private int activeHeight = 4;[Browsable(true)][Category("自定义属性")][Description("激活方块高度")]public int ActiveHeight{get { return activeHeight; }set{activeHeight = value;this.Invalidate();}}private int activeGap = 0;[Browsable(true)][Category("自定义属性")][Description("激活方块边距")]public int ActiveGap{get { return activeGap; }set{activeGap = value;this.Invalidate();}}protected override void OnPaint(PaintEventArgs e){base.OnPaint(e);Graphics graphics = e.Graphics;Rectangle rectangle = new Rectangle(activeGap, this.Height - activeHeight, this.Width - 2 * activeGap, activeHeight);graphics.FillRectangle(isbutactive ? new SolidBrush(this.activeColor) : new SolidBrush(this.BackColor), rectangle);}