Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi VirtualStringTree-有没有办法确定何时检查了节点集合?_Delphi_Virtualtreeview - Fatal编程技术网

Delphi VirtualStringTree-有没有办法确定何时检查了节点集合?

Delphi VirtualStringTree-有没有办法确定何时检查了节点集合?,delphi,virtualtreeview,Delphi,Virtualtreeview,我有一个使用三态检验的VST。它连接到数据库表,因此当用户检查节点时,其选中字段在数据库中更新。我希望这对最终用户是不可见的;这不是“保存”按钮 我目前正在使用OnChecked()事件更新数据库。问题是在检查大量节点时,它实际上执行#CheckedNodes SQL update语句。我想做的是在所有三态检查完成时捕获/得到通知,这样我就可以简单地扫描树并构造一条SQL update语句 在所有三态检查完成后,是否有可以使用的事件?否,迭代是唯一的方法。即使CheckedCount属性也可以这

我有一个使用三态检验的VST。它连接到数据库表,因此当用户检查节点时,其选中字段在数据库中更新。我希望这对最终用户是不可见的;这不是“保存”按钮

我目前正在使用OnChecked()事件更新数据库。问题是在检查大量节点时,它实际上执行#CheckedNodes SQL update语句。我想做的是在所有三态检查完成时捕获/得到通知,这样我就可以简单地扫描树并构造一条SQL update语句



在所有三态检查完成后,是否有可以使用的事件?

否,迭代是唯一的方法。即使CheckedCount属性也可以这样做。

不,迭代是唯一的方法。即使CheckedCount属性也是这样做的。

只是做一些测试,但看起来我可以简单地使用OnMouseUp()事件。我以前应该检查过的,哎呀

只是做一些测试,但看起来我可以简单地使用OnMouseUp()事件。我以前应该检查过的,哎呀

只要有一个内部列表,您就可以在其中存储选中的节点,一旦选中,事件就会更新列表。当检查大量节点时,只需迭代列表并构造SQL语句。

只需有一个内部列表,您可以在其中存储选中的节点,一旦选中事件,就会更新列表。检查大量节点时,只需遍历列表并构造SQL语句。

您所说的所有三态检查都已完成是什么意思?在virtualstringtree IIRC中不可能同时检查多个节点。如果要检查过程或函数中的多个节点,则可以使用列表存储我在回答中指出的已检查节点。我不确定这是否是您想要的,但如果您希望在用户将所有复选框从未定义状态设置为已定义状态后运行SQL更新,您可以只存储未定义的检查状态计数。加载后,只需将此变量设置为节点计数。在OnChecked事件中,您将减少这个变量,如果您达到0,您只需迭代树,构建并运行SQL语句。您所说的所有三态检查都已完成是什么意思?在virtualstringtree IIRC中不可能同时检查多个节点。如果要检查过程或函数中的多个节点,则可以使用列表存储我在回答中指出的已检查节点。我不确定这是否是您想要的,但如果您希望在用户将所有复选框从未定义状态设置为已定义状态后运行SQL更新,您可以只存储未定义的检查状态计数。加载后,只需将此变量设置为节点计数。在OnChecked事件中,您将减少这个变量,如果您达到0,您只需遍历树,构建并运行SQL语句。您可以使用OnMouseUp,它会在您发现时触发OnChecked(或者更准确地说是DoCheckClick)。但是只要单击节点,OnMouseUp就会触发。只有在按下同一节点复选框时释放鼠标按钮,OnChecked事件才会在鼠标向上移动时触发。因此,如果要查找在检查状态更改后激发的事件,请使用OnChecked。检查状态更改已在此处完成。请不要使用鼠标事件,至少不要单独使用鼠标事件。你会错过通过其他方式检查的节点,比如键盘。说得好,罗布,我没想到。我必须重新考虑。是的,当然。您可以使用OnMouseUp,它会在您发现时触发OnChecked(或者更准确地说是DoCheckClick)。但是只要单击节点,OnMouseUp就会触发。只有在按下同一节点复选框时释放鼠标按钮,OnChecked事件才会在鼠标向上移动时触发。因此,如果要查找在检查状态更改后激发的事件,请使用OnChecked。检查状态更改已在此处完成。请不要使用鼠标事件,至少不要单独使用鼠标事件。你会错过通过其他方式检查的节点,比如键盘。说得好,罗布,我没想到。我将不得不重新考虑。这可能有效,但我真的需要一个时间点,当我知道所有节点何时完成检查。似乎这可能不存在。检查状态更改时会触发OnChecked事件。那么,为什么不简单地使用一些变量,默认情况下,它将是节点的总计数,在OnChecked事件中,您只需减少它的值。当你达到0时,你可以确定你所有的节点都改变了它们的状态。这可能会起作用,但我真的是在一个时间点之后,当我知道所有的节点都完成了检查。似乎这可能不存在。检查状态更改时会触发OnChecked事件。那么,为什么不简单地使用一些变量,默认情况下,它将是节点的总计数,在OnChecked事件中,您只需减少它的值。当达到0时,可以确保所有节点都会更改其状态。