set checkbox.checked不带onclick事件

TCheckBox Delphi控件显示一个复选框,该复选框可以打开(选中)或关闭(未选中)。Checked属性指定是否选中该复选框。...

TCheckBox Delphi控件显示一个复选框,该复选框可以打开(选中)或关闭(未选中)。Checked属性指定是否选中该复选框。

Cursor over 'checked' checkbox on computer screen, close-up

当用户单击复选框以更改其选中状态时,将触发复选框的OnClick事件。

更改复选框的checked属性

由于没有OnCheckedChanged事件,您可能会根据OnClick事件中复选框的选中状态来处理程序逻辑。

但是,如果以编程方式更改Checked属性,则将触发OnClick事件——即使没有发生用户交互。

在“禁用”OnClick事件时,有(至少)两种方法可以通过编程更改复选框的checked属性。

移除onclick处理程序,选中更改,放回原始onclick处理程序

在Delphi for Win32中,事件只能附加一个事件处理程序(过程)(即使在Delphi for Win32中有一种模拟多播事件的方法)。TCheckBox控件的OnClick事件的签名是“type TNotifyEvent=对象的过程(发送方:TObject)

如果在更改复选框的状态之前将NIL分配给OnClick事件,则恢复到原始OnClick事件处理过程-OnClick事件将不会被激发。

procedure SetCheckedState(const checkBox : TCheckBox; const check : boolean) ; var onClickHandler : TNotifyEvent; begin with checkBox do begin onClickHandler := OnClick; OnClick := nil;     Checked := check;     OnClick := onClickHandler;    end; end;

此过程的用法很简单:

//toggle Checked statebegin SetCheckedState(CheckBox1, NOT CheckBox1.Checked) ; end;

上面的SetCheckedState切换CheckBox1复选框的Checked属性。

受保护的黑客:单击禁用:=真

当您以编程方式更改复选框的Checked属性时,另一种停止OnClick执行的方法是利用“hidden”(受保护的)ClicksDisabled属性。

通过查看TCheckBox的SetState过程(每当选中的属性更改时都会执行该过程),如果ClicksDisabled不为true,则会触发OnClick。

由于ClicksDisabled受保护,您无法从代码中访问它。

幸运的是,受保护的黑客技术使您能够访问Delphi控件的那些隐藏/受保护属性。

访问组件的受保护成员可提供有关该主题的更多信息。

您需要做的是在将使用ClicksDisabled属性的同一单元中声明一个扩展TCheckBox的简单伪类。

一旦您获得ClicksDisabled,只需将其设置为true,更改Checked属性,然后将ClicksDisabled设置回false(默认值):

type TCheckBoxEx = class(TCheckBox) ; ... with TCheckBoxEx(CheckBox1) dobegin ClicksDisabled := true; Checked := NOT Checked; ClicksDisabled := false; end;

注意:上面的代码使用受保护的ClicksDisabled属性切换名为“CheckBox1”的复选框的Checked属性。

用delphi构建应用程序

  • Delphi数据库编程初学者指南
  • 将基本图表集成到Delphi应用程序中
  • 如何在运行时移动控件并调整其大小
  • 多线程Delphi数据库查询

  • 发表于 2021-09-15 04:04
  • 阅读 ( 160 )
  • 分类:IT

你可能感兴趣的文章

苹果修复了MacBookPro的电池寿命缺陷

...很大。带触摸屏的13英寸型号持续了3.75小时到16小时。而不带触摸屏的13英寸型号持续了4.5小时到19.5小时。 ...

  • 发布于 2021-03-16 07:32
  • 阅读 ( 182 )

什么是javascript?它是如何工作的?

... <img id="myImg" src="prev-image.png"><button onclick="document.getElementById('myImg').src='new-image.png'">Change Image</button> Update the text content of a paragraph (p) element? Set the innerHTML proper...

  • 发布于 2021-03-18 04:01
  • 阅读 ( 271 )

API如何工作以及如何将它们集成到应用程序中

...lt;/script></head><body> <button id="color-button" onclick="sample()">Display color picker</button><div id="color-circle"> </div><div id="color-code"> </div></body><script>let colors= document.getElementById('color-code'); c***t s...

  • 发布于 2021-03-29 15:48
  • 阅读 ( 201 )

如何取回旧的,不带标签的gmail收件箱

昨天,谷歌宣布了一种新的收件箱,可以自动将你的电子邮件分类。如果你试过,但这不是你的事,下面是如何找回它。对于初学者来说,您可能还没有注意到您刚刚有了访问权限。当它在接下来的几周内推出时,您可以通过单...

  • 发布于 2021-05-23 20:20
  • 阅读 ( 75 )

如何使电脑的启动声音静音并像忍者一样启动

...(别担心,我们稍后会移动它)。将脚本中的第二行改为不带而不是带:#/bin/bash osascript-e'设置音量而不输出静音'按Ctrl+X,按Y表示同意,然后键入~/Documents/unmute.sh作为文件名。按回车键保存新文件,nano应该退出。在终端中运行...

  • 发布于 2021-05-28 13:46
  • 阅读 ( 131 )

情节(plot)和设置(setting)的区别

...素。情节和背景的主要区别在于,情节是故事中的一系列事件和事件,而背景是故事的背景,以故事发生的时间和地点为特征。 什么是情节(plot)? “情节”一词是指构成故事的一系列事件和事件。这些事件和事件在整个故事中...

  • 发布于 2021-06-27 16:21
  • 阅读 ( 485 )

如何按文本定位treeview节点(locate treeview node by text)

...: TObject);var tn : TTreeNode;begin tn:=GetNodeByText(TreeView1,Edit1.Text,CheckBox1.Checked); if tn = nil then ShowMessage('Not found!') elsebegin TreeView1.SetFocus; tn.Selected := True; end;end; 注意:如果节点位于,代码将选择该节点,如果不在,将显示消息。 就这...

  • 发布于 2021-09-04 07:21
  • 阅读 ( 145 )

将项目添加到tpopup delphi菜单

...TMenuItem Delphi类表示。当用户选择(单击)一个项目时,OnClick事件将被触发,以供您(作为开发人员)获取该事件并响应它。 在某些情况下,菜单项在设计时未知,但需要在运行时添加(动态实例化)。 在运行时添加tmenuit...

  • 发布于 2021-09-06 15:10
  • 阅读 ( 166 )

计算器脚本

...2px;}</style><script language="JavaScript">function Calculator_OnClick(keyStr){var resultsField = document.calculator.calcResults;switch (keyStr){case "0":case "1":case "2":case "3":case "4":case "5":case "6":case "7":case "8":case "9":case "0":case ".":if ((this.lastOp==this.opClear) ||...

  • 发布于 2021-09-08 11:16
  • 阅读 ( 161 )

如何将复选框和单选按钮添加到ttreeview(add check boxes and radio buttons to a ttreeview)

...和/或单选按钮的选中和未选中状态的图像。 在树视图的OnClick和OnKeyDown事件中调用ToggleTreeViewCheckBox过程(见下文)。ToggleTreeViewCheckBox过程更改选定节点的状态索引以反映当前选中/未选中状态。 为了使您的treeview更加专业,您...

  • 发布于 2021-09-10 22:15
  • 阅读 ( 177 )
香菜-不香
香菜-不香

0 篇文章

相关推荐