当前位置: 首页 > news >正文

winform控件PropertyGrid的应用(使运行中的程序能像vistual studio那样设置控件属性)

上周在看别人写的上位机demo代码时,发现创建的项目模板是"Windows 窗体控件库"(如下图)

 生成的项目结构像自定义控件库,没有程序入口方法Main,但却很神奇能调试,最后发现原来Vistual Studio启动了一个外挂程序UserControl TestContainer.exe,运行效果如下图:

 最后发现该exe在目录C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE下,这个目录和安装的vistual studio的版本有关,如下图:

通过反编译看到了PropertyGrid控件,如下图,然后查阅相关的博客就知道怎样使用了

 

而最近发现我们公司的项目发现也用到了该控件,所以学习它就提上了日程。像有些卡业务流程或者调用第三方的接口的业务逻辑,某些机器因某种原因需要临时关闭该功能,就可以使用该控件实现个性化控制了,我上一家公司是用一个表来存储这种个性化设置参数,这样就要向数据库中查询一次,有点浪费性能了。

好了,下面就和我一起体验一下该控件吧,当然网上也有很多博客教程了,本文就简单意思一下就行,核心就是设置PropertyGrid控件的SelectedObject属性为对应的Control控件

步骤如下:

1  新增winfrom项目,项目名称为:UserControlContainer,生成的项目结构默认有一个Form1,就用它了

2  在工具箱中向Form1窗体拖入Button、Panel和PropertyGrid控件,布局如下:

 

3 新增自定义控件,名为:UserControlTest,如下图:

详细代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;namespace UserControlContainer
{public partial class UserControlTest : UserControl{private string _newProp;[Browsable(true), Category("自定义属性"), Description("测试描述")]public string NewProp{get { return _newProp; }set { this._newProp = value; }}public UserControlTest(){InitializeComponent();}}
}

代码中添加了自定义属性NewProp,属性上的标记信息用于程序在运行时显示的属性信息

4  在Form1编写的代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;namespace UserControlContainer
{public partial class Form1 : Form{UserControlTest userControlTest;public Form1(){InitializeComponent();button1.Click += button1_Click;button2.Click += Button2_Click;button3.Click += Button3_Click;userControlTest = new UserControlTest();userControlTest.Dock = DockStyle.Fill;userControlTest.BackColor = Color.Black;this.panel1.Controls.Add(userControlTest);}/// <summary>/// 鼠标点击事件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button1_Click(object sender, EventArgs e){this.propertyGrid1.SelectedObject = this.button1;}/// <summary>/// 设为空按钮点击事件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void Button2_Click(object sender, EventArgs e){this.propertyGrid1.SelectedObject = null;}private void Button3_Click(object sender, EventArgs e){this.propertyGrid1.SelectedObject = this.userControlTest;}}
}

代码太简单了,就不解释了

5  运行测试效果如下图:

刚启动的效果图:

点击"设置按钮",按钮,可以看到右边的属性框信息,如下图:

 

通过右边的属性框 修改"设置按钮"的按钮名称为"设置按钮123",效果如下图:

 

点击"设为空"按钮,效果如下图:

点击"设置自定义控件"按钮,可以看到自定义的属性NewProp,效果如下图:

 

 然后在右边的属性框中修改自定义控件的背景颜色为红色,效果如下图:

好了,本文到此结束。

 

 

http://www.lryc.cn/news/28107.html

相关文章:

  • SBUS的协议详解
  • 【PyTorch】教程:torch.nn.Hardshrink
  • JavaScript 函数参数
  • 【C】标准IO库函数
  • http客户端Feign
  • 如何在Java中使用枚举类:从入门到进阶
  • 操作系统(1.2)--引论
  • 【Linux】 shell if的[]和[[]]区别
  • 利用flask解析海康摄像头视频
  • ./docker-compose.yml‘ is invalid
  • Java 流程控制
  • 边界无限入选首届“网络安全高成长性企业”并荣获“勇创之星”
  • SpringBoot项目的快速创建方式(包含第一个程序的运行)
  • linux下设置定期执行需要root权限的sh文件
  • 认识异或运算
  • 内容提供者的简单使用
  • Modelsim 操作结构和流程
  • vue和react有什么不同
  • js求解《初级算法》28. 找出字符串中第一个匹配项的下标
  • VAE--part1
  • 备战四级!!!
  • sizeof与strlen练习
  • 知识图谱的介绍
  • 【Redis】Redis高级客户端Lettuce详解
  • Qt——自定义界面之QStyle
  • 指针和数组面试题(逐题分析,完善你可能遗漏的知识)
  • centos7搭建nfs挂载日志目录完整步骤
  • 三、JavaScript
  • 深圳大学计软《面向对象的程序设计》实验11 多继承
  • 并发变成实战-原子变量与非阻塞同步机制