ComponentGroup 组件组扩展
介绍
ComponentGroup 扩展解决了 App Inventor 中的两个常见问题:
- 内容变化检测:无需使用复杂的定时器和值比较即可检测组件内容是否被修改
- 批量启用/禁用:一次性启用或禁用一组组件(例如在考试期间禁用输入区域)

主要功能
- 监控多个组件的内容变化
- 检测内容是否被触碰或修改
- 批量启用或禁用组件组
- 支持撤销所有更改恢复初始值
- 自动为组件分配标识符
支持的组件
| 组件类型 | 说明 |
|---|---|
| TextBox | 文本框 |
| PasswordTextBox | 密码文本框 |
| CheckBox | 复选框 |
| Button | 按钮 |
| Switch | 开关 |
| Slider | 滑块 |
| Spinner | 下拉选择器 |
| DatePicker | 日期选择器 |
| ContactPicker | 联系人选择器 |
| PhoneNumberPicker | 电话号码选择器 |
| ImagePicker | 图像选择器 |
| TimePicker | 时间选择器 |
| ListPicker | 列表选择器 |
| EmailPicker | 邮箱选择器 |
下载
.aix拓展文件:
de.UllisRoboterSeite.UrsAI2ComponentGroup.aix
.aia示例文件:
版本历史
| 版本 | 日期 | 修改内容 |
|---|---|---|
| 1.0 | 2020-03-01 | 初始版本 |
截图
示例应用

禁用输入区域

参考
属性 Properties
- 内容已触碰 ContentTouched
- 指示任何已注册组件的内容是否曾经被修改过。一旦设为 true,将保持为 true 直到调用 ResetContentHasChanged。

- 内容已更改 ContentChanged
- 指示当前内容是否与初始值不同。如果用户修改后又恢复原值,此属性将变为 false。

方法 Methods
- 添加命名组件 AddNamedComponent(组件, 组件名称)
- 将组件添加到监控组,并指定自定义名称。当内容变化时,AfterContentTouched 事件将返回此名称。

- 添加组件 AddComponent(组件)
- 将组件添加到监控组,自动分配数字标识符。

- 移除组件 RemoveComponent(组件)
- 从监控组中移除指定组件。

- 重置内容已更改 ResetContentHasChanged()
- 将当前值存储为新的初始值,并将 ContentTouched 和 ContentChanged 重置为 false。

- 撤销 Undo()
- 将所有组件恢复到初始值。触发 AfterContentTouched 事件,组件名称参数为 “-all-“。

- 设置启用 SetEnable(启用)
- 启用或禁用 AfterContentTouched 事件的触发。设为 false 可暂时停止内容变化检测。

- 启用组 EnableGroup(启用)
- 启用或禁用组中所有已注册的组件。

- 启用排列 EnableArrangement(排列组件, 启用)
- 启用或禁用指定排列(Arrangement)中的所有组件。

事件 Events
- 内容触碰后 AfterContentTouched(组件名称)
- 当任何已监控组件的内容发生变化时触发。
ComponentName:发生变化的组件名称(通过 AddNamedComponent 指定的名称,或自动分配的数字ID)

使用示例
基本用法 - 监控内容变化
当 Screen1.Initialize 时
调用 ComponentGroup1.AddNamedComponent
组件 = TextBox1
组件名称 = "姓名"
调用 ComponentGroup1.AddNamedComponent
组件 = TextBox2
组件名称 = "邮箱"
调用 ComponentGroup1.AddComponent
组件 = CheckBox1
当 ComponentGroup1.AfterContentTouched 时
设置 Label1.Text 为 连接("组件已修改: ", 获取 组件名称)
保存前检查是否有修改
当 SaveButton.Click 时
如果 ComponentGroup1.ContentChanged 那么
调用 保存数据
否则
调用 Notifier1.ShowAlert
消息 = "没有需要保存的更改"
考试模式 - 禁用输入区域
当 StartExamButton.Click 时
调用 ComponentGroup1.EnableArrangement
排列组件 = InputArrangement
启用 = false
设置 StartExamButton.Enabled 为 false
设置 EndExamButton.Enabled 为 true
当 EndExamButton.Click 时
调用 ComponentGroup1.EnableArrangement
排列组件 = InputArrangement
启用 = true
撤销所有更改
当 UndoButton.Click 时
调用 ComponentGroup1.Undo
注意事项
-
单组限制:每个组件只能属于一个组件组。将同一组件添加到多个组会导致错误。
-
重复添加:重复将同一组件添加到同一组是安全的,不会产生错误。
-
组件名称:由于 App Inventor 的限制,无法通过代码获取组件在项目中的名称。因此建议使用 AddNamedComponent 为组件指定有意义的名称。
- ContentTouched vs ContentChanged:
ContentTouched:一旦内容被修改就变为 true,不会自动变回 falseContentChanged:如果用户恢复原始值,会变回 false
- 禁用组件:使用 EnableGroup 或 EnableArrangement 禁用组件后,用户无法与这些组件交互,适用于考试等场景。
原文链接
原版文档:Ullis Roboter Seite - AI2 ComponentGroup
作者:Urs (Ullis Roboter Seite)
扫码添加客服咨询