【PB案例学习笔记】-31制作一个动态设置菜单的程序

写在前面

这是PB案例学习笔记系列文章的第31篇,该系列文章适合具有一定PB基础的读者。

通过一个个由浅入深的编程实战案例学习,提高编程技巧,以保证小伙伴们能应付公司的各种开发需求。

文章中设计到的源码,小凡都上传到了gitee代码仓库https://gitee.com/xiezhr/pb-project-example.git

gitee代码仓库

需要源代码的小伙伴们可以自行下载查看,后续文章涉及到的案例代码也都会提交到这个仓库【pb-project-example

如果对小伙伴有所帮助,希望能给一个小星星⭐支持一下小凡。

一、小目标

本案例我们将制作一个根据用户选择动态设置菜单的程序。用户通过选择“恢复”、“无效”、“去除” 来改变对应菜单项。

最终实现效果如下所示

动态设置菜单

二、创作思路

我们通过单选按钮、复选框来选择,再通过相应的设置菜单项的EnableVisible两种属性来动态设置菜单栏

① 单选框

当单选按钮处于选中状态时,单选按钮中出现一个黑色圆点,未选中时,小圆圈中没有其它图案。

当我们使用组框控件对单选按钮分组时,同一组中的单选按钮只有一个会处于选中状态,其它全部处于非选中状态

② 复选框

当复选框被选中时,复选框上显示选中符号(打勾符号)

当未选中复选框时,复选框上不显示选中符号

三、创建程序基本框架

① 新建examplework工作区

② 新建exampleapp应用

③ 新建w_main窗口,将其Title属性设置为“设置菜单”

由于文章篇幅原因,上述步骤不再赘述,如果忘记了的小伙伴可以翻一翻之前的文章复习一下

④ 新建m_main菜单对象,如下图所示

新建m_main菜单

⑤ 控件布局

w_main窗口上添加2个GroupBox控件、3个RadioButton控件、6个CheckBox控件和1个CommonButton控件。

调整各个控件的大小与位置,如下图所示

控件布局

四、编写事件代码

① 在cbx_file控件(文件)的Clicked事件中添加如下代码

If not this.checked then
	cbx_open.checked = false
	cbx_close.checked = false
	cbx_save.checked = false
end if

② 在cb_1按钮(更新菜单)的clicked事件中添加如下代码

if rb_1.checked then
	m_main.m_file.Enabled = True
	m_main.m_file.Visible = True
	m_main.m_file.m_open.Enabled = True
	m_main.m_file.m_open.Visible = True
	m_main.m_file.m_close.Enabled = True
	m_main.m_file.m_close.Visible = True
	m_main.m_file.m_save.Enabled = True
	m_main.m_file.m_save.Visible = True
	m_main.m_edit.Enabled = True
	m_main.m_edit.Visible = True
	m_main.m_tool.Enabled = True
	m_main.m_tool.Visible = True
end if 

if rb_2.checked then
	m_main.m_file.Visible = True
	m_main.m_edit.Visible = True
	m_main.m_tool.Visible = True
	if cbx_file.checked then
		m_main.m_file.enabled = false
		m_main.m_file.m_open.Visible = True
		m_main.m_file.m_close.Visible = True
		m_main.m_file.m_save.Visible = True
		if cbx_open.checked then 
			m_main.m_file.m_open.Enabled = false
		else
			m_main.m_file.m_open.Enabled = true
		end if 
		if cbx_close.checked then
			m_main.m_file.m_close.Enabled = False
		else
			m_main.m_file.m_close.Enabled = True
		end if
		if cbx_save.checked then
			m_main.m_file.m_save.Enabled = False
		else
			m_main.m_file.m_save.Enabled = true
		end if
	else
		m_main.m_file.Enabled = true
	end if
	if cbx_edit.checked then
		m_main.m_edit.Enabled = false
	else
		m_main.m_edit.Enabled = true
	end if
	if cbx_tool.checked then
		m_main.m_tool.Enabled = false
	else
		m_main.m_tool.Enabled = true
	end if
end if

if rb_3.checked then
	m_main.m_file.Enabled = True
	m_main.m_edit.Enabled = True
	m_main.m_tool.Enabled = True
	if cbx_file.checked then
		m_main.m_file.Visible = false
		m_main.m_file.m_open.Enabled = false
		m_main.m_file.m_close.Enabled = false
		m_main.m_file.m_save.Enabled = false
		if cbx_open.checked then 
			m_main.m_file.m_open.Visible = false
		else
			m_main.m_file.m_open.Visible = true
		end if 
		if cbx_close.checked then
			m_main.m_file.m_close.Visible = False
		else
			m_main.m_file.m_close.Visible = True
		end if
		if cbx_save.checked then
			m_main.m_file.m_save.Visible = False
		else
			m_main.m_file.m_save.Visible = true
		end if
	else
		m_main.m_file.Visible = true
	end if
	if cbx_edit.checked then
		m_main.m_edit.Visible = False
	else
		m_main.m_edit.Visible = True
	end if
	if cbx_tool.checked then
		m_main.m_tool.Visible = False
	else
		m_main.m_tool.Visible = true
	end if
end if

③ 在开发界面左边的SystemTree窗口中,双击exampleapp应用对象,在其Open事件中输入如下代码

open(w_main)

五、运行程序

经过一波代码编写后,来看看我们的劳动成果是否达到预期

动态设置菜单

本期内容就到这儿★,°:.☆( ̄▽ ̄)/$:.°★ 。 希望对您有所帮助

我们下期再见 ヾ(•ω•`)o (●’◡’●)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/791331.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

研华运动控制卡在LabVIEW中的应用

在现代工业和科研领域中,精密运动控制系统的需求日益增加。这些系统广泛应用于自动化生产线、精密机械加工、机器人控制、光学仪器调试和实验室自动化设备等诸多领域。本文以研华公司的运动控制卡为例,详细介绍其在LabVIEW中的应用,展示如何通…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第一篇 嵌入式Linux入门篇-第十九章 Linux 工具之make 工具和 makefile 文件

i.MX8MM处理器采用了先进的14LPCFinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

【PTA天梯赛】L1-006 连续因子(20分)

作者:指针不指南吗 专栏:算法刷题 🐾或许会很慢,但是不可以停下来🐾 文章目录 题目题解题意步骤 总结 题目 题目链接 题解 题意 求解n的最长连续因子 和因子再相乘的积无关,真给绕进去了 步骤 双重循…

Backend - C# 的日志Lognet4

目录 一、安装 log4net 插件 (一)作用 (二)操作 (三)注意 二、配置 (一)配置AssemblyInfo.cs (二)配置log4net.config 1. 创建log4net.config文件&#xff08…

前端工程化(01):Webpack、Gulp、Grunt三大自动化构建工具对比

10年前端开发和UI设计老司机→贝格前端工场,为您分享。本期介绍三款自动化构建工具,看看他们的工作原理和差异化,帮助你来选择。 Webpack、Gulp和Grunt都是前端构建工具,用于优化前端开发流程和提高开发效率。它们都可以自动化执…

【IT领域新生必看】解锁 `final` 关键字的秘密:Java 编程中的终极武器

文章目录 引言什么是 final 关键字?一、 final 变量final 局部变量final 实例变量final 静态变量 二、 final 方法三、 final 类四、 final 关键字的实际应用1. 定义常量2. 防止方法被重写3. 创建不可变类4. 优化性能 五、 final 的一些常见误区1. final 变量不能在…

WordPress知识付费系统+自动采集插件

采集功能: 1.支持分类替换 将主站同步过来的文章分类进行替换 2.支持自定义文章作者(选择多个作者则同步到的文章作者将会随机分配) 3.支持添加黑名单分类 添加后 如果同步过来的文章包含黑名单分类将不会发布文章 4.自动检测同步&#xf…

RK3568平台(vendor篇)vendor storage分区

一.简介 rockchip vendor storage是一种用于存储SN, MAC, LAN, BT等数据的区域,它具有不会丢失和系统启动各个阶段都可以访问的特性。它使用GPT分区表格式,并在U-boot, kernel和用户空间中提供了相应的驱动文件和接口。 rockchip vendor storage是一种特…

IP 地址与 CDN 性能优化

内容分发网络(CDN)就是通过内容分配到离用户最优的服务器来提高访问速度。而IP地址如何分配与管理就是CND技术的基础。本文将来探讨介绍CDN中的IP地址分配与管理,以及如何通过CDN优化网络性能。 首先我们来了解CDN的基本原理 CDN是一种分布式…

宏任务与微任务对比【前端异步】

目录 简介微任务与宏任务的基本概念宏任务(Macrotasks)微任务(Microtasks)宏任务示例微任务示例微任务与宏任务的执行时序 结论 简介 在JavaScript的异步编程中,理解事件循环(Event Loop)是至关…

Elasticsearch:Node.js ECS 日志记录 - Morgan

这是之前系列文章: Elasticsearch:Node.js ECS 日志记录 - Pino Elasticsearch:Node.js ECS 日志记录 - Winston 中的第三篇文章。在今天的文章中,我将描述如何使用 Morgan 包针对 Node.js 应用进行日子记录。此 Morgan Node.j…

SpringCloud学习

认识微服务 1.单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署 优点:架构简单 部署成本低 缺点:耦合度高 2.分布式架构:根据业务功能对系统进行拆分,每个业务模块作为独立项目开发&…

使用来此加密申请多域名SSL证书

在数字化时代的浪潮中,网站的安全性已成为企业和个人不可或缺的一部分。特别是在数据传输和用户隐私保护方面,SSL证书的作用愈发显著。 申请多域名SSL证书步骤 1、登录来此加密网站,输入域名,可以勾选泛域名和包含根域。 2、选择…

【结构型模式-代理模式】

概述 由于某些原因需要给某对象提供一个代理以控制该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象与目标对象之间的中介。 Java中的代理按照代理类生成时机不同又分为静态代理和动态代理。静态代理代理类在编译期就生…

手撸俄罗斯方块(五)——游戏主题

手撸俄罗斯方块(五)——游戏主题 当确定游戏载体(如控制台)后,界面将呈现出来。但是游戏的背景色、方块的颜色、方框颜色都应该支持扩展。 当前游戏也是如此,引入了 Theme 的概念,支持主题的扩…

ADS基础教程24 - Gerber文件的导入

EM介绍 一、引言二、基本概念1.仿真文件下载2.仿真文件介绍 二、导入步骤1.新建workspace2.选择Layout结构3.导入设计4.选择文件类型5.导入文件6.预览文件内容7.铜皮离散问题 四、总结 一、引言 本章节开始介绍在ADS中进行PCB仿真,首先讲解如何将Gerber文件导入到A…

顺序结构 ( 四 ) —— 标准数据类型 【互三互三】

序 C语言提供了丰富的数据类型,本节介绍几种基本的数据类型:整型、实型、字符型。它们都是系统定义的简单数据类型,称为标准数据类型。 整型(integer) 在C语言中,整型类型标识符为int。根据整型变量的取值范…

【RHCE】基于用户认证和TLS加密的HTTP服务(HTTPS)

目录 一、创建用户账号 二、TLS加密 三、配置http服务子配置文件 四、创建访问http服务的文件夹以及输入重定向到文件 五、配置Linux本地仓库以及Windows下的本地仓库 六、基础操作 七、测试 一、创建用户账号 用户认证 # 创建两个账户 [rootlocalhost ~]# htpasswd -…

YOLOv10改进 | 损失函数篇 | SlideLoss、FocalLoss、VFLoss分类损失函数助力细节涨点(全网最全)

一、本文介绍 本文给大家带来的是分类损失 SlideLoss、VFLoss、FocalLoss损失函数,我们之前看那的那些IoU都是边界框回归损失,和本文的修改内容并不冲突,所以大家可以知道损失函数分为两种一种是分类损失另一种是边界框回归损失,…

【安全设备】数据库审计

一、什么是数据库审计 数据库审计(简称DBAudit)是一种以安全事件为中心,实时记录网络上的数据库活动,并对数据库操作进行细粒度审计的合规性管理技术。它通过对用户访问行为的记录、分析和汇报,帮助用户事后生成合规报…