ComponentGroup 组件组扩展:监控内容变化和批量启用禁用组件

« 返回首页

ComponentGroup 组件组扩展

介绍

ComponentGroup 扩展解决了 App Inventor 中的两个常见问题:

  1. 内容变化检测:无需使用复杂的定时器和值比较即可检测组件内容是否被修改
  2. 批量启用/禁用:一次性启用或禁用一组组件(例如在考试期间禁用输入区域)

组件图标

主要功能

  • 监控多个组件的内容变化
  • 检测内容是否被触碰或修改
  • 批量启用或禁用组件组
  • 支持撤销所有更改恢复初始值
  • 自动为组件分配标识符

支持的组件

组件类型 说明
TextBox 文本框
PasswordTextBox 密码文本框
CheckBox 复选框
Button 按钮
Switch 开关
Slider 滑块
Spinner 下拉选择器
DatePicker 日期选择器
ContactPicker 联系人选择器
PhoneNumberPicker 电话号码选择器
ImagePicker 图像选择器
TimePicker 时间选择器
ListPicker 列表选择器
EmailPicker 邮箱选择器

下载

.aix拓展文件:

de.UllisRoboterSeite.UrsAI2ComponentGroup.aix

.aia示例文件:

UrsComponentGroupTest.aia

版本历史

版本 日期 修改内容
1.0 2020-03-01 初始版本

截图

示例应用

示例应用截图

禁用输入区域

禁用输入区域

参考

属性 Properties

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

ContentTouched

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

ContentChanged

方法 Methods

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

AddNamedComponent

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

AddComponent

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

RemoveComponent

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

ResetContentHasChanged

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

Undo

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

SetEnable

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

EnableGroup

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

EnableArrangement

事件 Events

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

AfterContentTouched

使用示例

基本用法 - 监控内容变化

当 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

注意事项

  1. 单组限制:每个组件只能属于一个组件组。将同一组件添加到多个组会导致错误。

  2. 重复添加:重复将同一组件添加到同一组是安全的,不会产生错误。

  3. 组件名称:由于 App Inventor 的限制,无法通过代码获取组件在项目中的名称。因此建议使用 AddNamedComponent 为组件指定有意义的名称。

  4. ContentTouched vs ContentChanged
    • ContentTouched:一旦内容被修改就变为 true,不会自动变回 false
    • ContentChanged:如果用户恢复原始值,会变回 false
  5. 禁用组件:使用 EnableGroup 或 EnableArrangement 禁用组件后,用户无法与这些组件交互,适用于考试等场景。

原文链接

原版文档:Ullis Roboter Seite - AI2 ComponentGroup

作者:Urs (Ullis Roboter Seite)

文档反馈