【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 thencbx_open.checked = falsecbx_close.checked = falsecbx_save.checked = false
end if

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

if rb_1.checked thenm_main.m_file.Enabled = Truem_main.m_file.Visible = Truem_main.m_file.m_open.Enabled = Truem_main.m_file.m_open.Visible = Truem_main.m_file.m_close.Enabled = Truem_main.m_file.m_close.Visible = Truem_main.m_file.m_save.Enabled = Truem_main.m_file.m_save.Visible = Truem_main.m_edit.Enabled = Truem_main.m_edit.Visible = Truem_main.m_tool.Enabled = Truem_main.m_tool.Visible = True
end if if rb_2.checked thenm_main.m_file.Visible = Truem_main.m_edit.Visible = Truem_main.m_tool.Visible = Trueif cbx_file.checked thenm_main.m_file.enabled = falsem_main.m_file.m_open.Visible = Truem_main.m_file.m_close.Visible = Truem_main.m_file.m_save.Visible = Trueif cbx_open.checked then m_main.m_file.m_open.Enabled = falseelsem_main.m_file.m_open.Enabled = trueend if if cbx_close.checked thenm_main.m_file.m_close.Enabled = Falseelsem_main.m_file.m_close.Enabled = Trueend ifif cbx_save.checked thenm_main.m_file.m_save.Enabled = Falseelsem_main.m_file.m_save.Enabled = trueend ifelsem_main.m_file.Enabled = trueend ifif cbx_edit.checked thenm_main.m_edit.Enabled = falseelsem_main.m_edit.Enabled = trueend ifif cbx_tool.checked thenm_main.m_tool.Enabled = falseelsem_main.m_tool.Enabled = trueend if
end ifif rb_3.checked thenm_main.m_file.Enabled = Truem_main.m_edit.Enabled = Truem_main.m_tool.Enabled = Trueif cbx_file.checked thenm_main.m_file.Visible = falsem_main.m_file.m_open.Enabled = falsem_main.m_file.m_close.Enabled = falsem_main.m_file.m_save.Enabled = falseif cbx_open.checked then m_main.m_file.m_open.Visible = falseelsem_main.m_file.m_open.Visible = trueend if if cbx_close.checked thenm_main.m_file.m_close.Visible = Falseelsem_main.m_file.m_close.Visible = Trueend ifif cbx_save.checked thenm_main.m_file.m_save.Visible = Falseelsem_main.m_file.m_save.Visible = trueend ifelsem_main.m_file.Visible = trueend ifif cbx_edit.checked thenm_main.m_edit.Visible = Falseelsem_main.m_edit.Visible = Trueend ifif cbx_tool.checked thenm_main.m_tool.Visible = Falseelsem_main.m_tool.Visible = trueend if
end if

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

open(w_main)

五、运行程序

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

动态设置菜单

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

初识C++语言(1)

目录 C语言简介 C 语言概述 C 语言的特点 语言简洁紧凑,使用灵活方便 运算符丰富 数据结构丰富 结构化语言 生成的代码质量高 可移植性强 C程序结构 C语言系统的使用 一.启动Dev-C 二、新建源程序 三…

星辰计划02-独特视角的spring动态代理

承接上一文 动态代理 ,这里探究spring 动态代理 会话1:spring动态代理 quick start 👧哥哥,哥哥,spring 怎么去搞动态代理的呢👨 来来来,听我细细来说 quick start通过Spring的 ProxyFactory…

nvm安装node一直没有npm

报错问题:使用nvm安装Node.js后没有npm。 解释: NVM (Node Version Manager) 是一个用于管理Node.js版本的工具,它允许你在同一台机器上安装和使用不同版本的Node.js。通常情况下,安装Node.js的过程中会自动包含npm(…

LoRaWAN网络协议Class A/Class B/Class C三种工作模式说明

LoRaWAN是一种专为广域物联网设计的低功耗广域网络协议。它特别适用于物联网(IoT)设备,可以在低数据速率下进行长距离通信。LoRaWAN 网络由多个组成部分构成,其中包括节点(终端设备)、网关和网络服务器。Lo…

Unity到底有无collider可视化,方便调试子弹,ACT,做Demo等

参照日本程序员的代码,改了一些,算是支持MeshCollider 好像确实就是日本《博客》比较多这类,可视化的调试资料 UnityでデバッグをするときColliderを可視化したいことってありますよね。 コライダーを見える化するには Physics Debuggerを使う可視化スクリプトを使うの2通り…

AWS 云安全性:检测 SSH 暴力攻击

由于开源、低成本、可靠性和灵活性等优势,云基础设施主要由基于linux的机器主导,然而,它们也不能幸免于黑客的攻击,从而影响云的安全性。攻击Linux机器最流行的方法之一是通过SSH通道。 什么是 SSH 安全外壳协议(Sec…

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

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

Unity3D中UI层级改变详解

在Unity3D开发中,UI层级的调整是常见的需求,它直接关系到用户界面(UI)元素的显示顺序。在Unity的UI系统中,主要使用UGUI(Unitys Graphical User Interface)来实现界面布局和元素展示。本文将详细讲解Unity3D中如何改变…

华为机考真题 -- 连续自然数之和来表达整数

题目描述&#xff1a; 一个整数可以由连续的自然数之和来表示给定一个整数&#xff0c;计算该整数有几种连续自然数之和的表达式&#xff0c;且打印出每种表达式 示例&#xff1a; 输入 9 输出 99 945 9234 Result:3 C源码&#xff1a; #include <iostream> #includ…

代码随想录-DAY⑦-字符串——leetcode 344 | 541 | 151

344 思路 没啥好说的&#xff0c; 双指针头尾交换&#xff0c; 相遇结束。 时间复杂度&#xff1a;O(n) 空间复杂度&#xff1a;O(1) 代码 class Solution { public:void reverseString(vector<char>& s) {int left0, rights.size()-1;while(left<right){swa…

低代码平台赋能企业全面数字化转型

引言&#xff1a;在当今这个日新月异的数字化时代&#xff0c;企业正面临着前所未有的机遇与挑战。为了保持竞争力并实现可持续发展&#xff0c;企业亟需进行全面的数字化转型。而低代码平台作为数字化转型的重要工具&#xff0c;正以其独特的优势赋能企业&#xff0c;推动其向…

智慧城市的神经网络:Transformer模型在智能城市构建中的应用

智慧城市的神经网络&#xff1a;Transformer模型在智能城市构建中的应用 随着城市化的快速发展&#xff0c;智能城市的概念应运而生&#xff0c;旨在通过先进的信息技术提升城市管理效率和居民生活质量。Transformer模型&#xff0c;作为人工智能领域的一颗新星&#xff0c;其…

C语言自学探究---已知三边求指定的一个角的cos/sin值

一.已知三边求指定的一个角的cos/sin值 上一次我探究了三角形勾股定理实例http://t.csdnimg.cn/eY7zI 写完三角形勾股定理代码后&#xff0c;我自然而然想到了解三角形中&#xff1a; 已知三边求指定的一个角的cos/sin值 于是我开始自己思考如何实现这一功能 part1:思考过程…

Perl编译器架构:前端与后端的精细分工

&#x1f527; Perl编译器架构&#xff1a;前端与后端的精细分工 Perl作为一种高级、通用的编程语言&#xff0c;其编译器的架构设计对于性能和灵活性至关重要。Perl编译器由前端和后端组成&#xff0c;它们各自承担着不同的职责。本文将深入解析Perl编译器前端和后端的区别&a…

Apache Flink 运行时架构

Flink 运行时架构 Flink整个系统由两个主要部分组成JobManager和TaskManager&#xff0c;Flink架构也遵循Master-Slave架构设计原则&#xff0c;JobManager为Master节点&#xff0c;TaskManager为worker&#xff08;Slave&#xff09;节点&#xff0c;所有组件之间通讯都是借助…

IDEA插件更新:配置选项更丰富、支持环境、全局参数的创建和维护

Apipost-Helper-2.0 IDEA插件&#xff0c;因快速扫描代码、基于注解提取信息、支持直接调试及生成API文档等功能受到众多用户的认可&#xff0c;是目前市面上一款真正高效便捷生成接口文档的利器。本月初&#xff0c;Apipost IDEA插件又迎来重大优化&#xff0c;在应用市场搜索…

如何降低pdf内存,如何降低pdf內存大小,如何降低pdf内存占用

在现代办公环境中&#xff0c;pdf文件已经成为了一种不可或缺的文档格式。然而&#xff0c;pdf内存太大文件常常给我们的工作带来困扰&#xff0c;本文将为你揭秘几种简单有效的方法&#xff0c;帮助你轻松降低 pdf 内存&#xff0c;提高工作效率。 方法一、安装pdf转换软件 打…

SVN 解决冲突

SVN 解决冲突 1. 引言 在软件开发过程中,版本控制是一个至关重要的环节。SVN(Subversion)作为一个流行的版本控制系统,被广泛应用于团队协作中。然而,当多个开发者同时对同一部分代码进行修改时,冲突是不可避免的。本文将详细介绍如何在SVN中解决这些冲突,以便团队成员…

Matlab学习笔记(个人向)

Matlab复习笔记(个人向) 学Matlab无非就一个讲究&#xff0c;老老实实把系统的help帮助中心部分给看了&#xff0c;非常的管用 1. 变量 申明变量表达式;写了;则不会显示在命令行窗口中&#xff0c;不写则会显示 查询 who语句查看工作空间中的所有变量whos查看工作空间中变量的…

ES6 Generator函数的语法 (七)

ES6 中的 Generator函数是一种特殊类型的函数&#xff0c;它允许你控制函数的执行流程&#xff0c;使其在执行过程中可以多次暂停和恢复。Generator 函数在定义时使用星号 * 作为后缀。 主要特性&#xff1a; 惰性计算&#xff1a;Generator 函数执行到 yield 表达式时会暂停&…