TCheckBox Delphi控件显示一个复选框,该复选框可以打开(选中)或关闭(未选中)。Checked属性指定是否选中该复选框。
当用户单击复选框以更改其选中状态时,将触发复选框的OnClick事件。
由于没有OnCheckedChanged事件,您可能会根据OnClick事件中复选框的选中状态来处理程序逻辑。
但是,如果以编程方式更改Checked属性,则将触发OnClick事件——即使没有发生用户交互。
在“禁用”OnClick事件时,有(至少)两种方法可以通过编程更改复选框的checked属性。
在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属性。
...很大。带触摸屏的13英寸型号持续了3.75小时到16小时。而不带触摸屏的13英寸型号持续了4.5小时到19.5小时。 ...
... <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...
...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...
昨天,谷歌宣布了一种新的收件箱,可以自动将你的电子邮件分类。如果你试过,但这不是你的事,下面是如何找回它。对于初学者来说,您可能还没有注意到您刚刚有了访问权限。当它在接下来的几周内推出时,您可以通过单...
...(别担心,我们稍后会移动它)。将脚本中的第二行改为不带而不是带:#/bin/bash osascript-e'设置音量而不输出静音'按Ctrl+X,按Y表示同意,然后键入~/Documents/unmute.sh作为文件名。按回车键保存新文件,nano应该退出。在终端中运行...
...素。情节和背景的主要区别在于,情节是故事中的一系列事件和事件,而背景是故事的背景,以故事发生的时间和地点为特征。 什么是情节(plot)? “情节”一词是指构成故事的一系列事件和事件。这些事件和事件在整个故事中...
...: 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; 注意:如果节点位于,代码将选择该节点,如果不在,将显示消息。 就这...
...TMenuItem Delphi类表示。当用户选择(单击)一个项目时,OnClick事件将被触发,以供您(作为开发人员)获取该事件并响应它。 在某些情况下,菜单项在设计时未知,但需要在运行时添加(动态实例化)。 在运行时添加tmenuit...
...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) ||...
...和/或单选按钮的选中和未选中状态的图像。 在树视图的OnClick和OnKeyDown事件中调用ToggleTreeViewCheckBox过程(见下文)。ToggleTreeViewCheckBox过程更改选定节点的状态索引以反映当前选中/未选中状态。 为了使您的treeview更加专业,您...