gpt4 book ai didi

delphi - TDrawGrid OnSetEditText 触发两次 + 就地编辑器 + TCustomGrid

转载 作者:行者123 更新时间:2023-12-02 07:57:12 27 4
gpt4 key购买 nike

我的表单上有一个 TDrawGrid(在 D2010 中)。我正在处理我的 OnDrawCell、OnSetEditText、OnSetEditText 等,一切都很好。

但是,如果在特定情况下您进入包含某些文本的单元格,请突出显示整个文本,然后键入一些要替换的字符。现在,一次按键后,OnSetEditText 事件会连续触发两次,第一次是空白字符串,然后再次是包含您键入的字符的字符串。这是正确的还是错误?我本来希望只用包含我键入的单个字符的字符串触发一次事件。

我正在使用 OnSetEdit 文本来设置其他类属性,这些属性会执行诸如验证之类的操作,因此当上述情况导致我的其他代码暂时认为我的类属性无效,然后在第二次火灾时立即再次设置为有效,但它仍然会产生不良后果,我想停止第一个事件的触发,或者我可以找到解决办法。

现在,在讨论网格的主题时,我可以向你们呼吁在以下方面提供有用的提示吗?我对 c# 的 deplhi 相当陌生(我要走另一条路!),但我发现文档非常薄弱,并且在谷歌搜索中得到的结果令人惊讶地有限,所以非常感谢您的帮助。

1) TDrawGrid 的自定义就地编辑器 - 感谢任何提示或好的链接!2)对于客户就地编辑器,我最好使用 TDrawGrid 还是从 TCustomGrid 降级我自己的控件并从那里开始?3)TCustomGrid。我在这里一事无成...如果我创建一个新组件并从 TCustomGrid 下降,当我将其放置在我的表单中时,我只会收到“抽象错误”。因此,进一步的实验基本上被取消了 - 甚至对开始使用 TCustomGrid 的建议表示赞赏!

我的计划是首先让组合框(虚拟模式)用作单元格编辑器。这是一个标准的 VCL 控件。之后,我计划基于虚拟组合框创建自己的控件,但在顶部使用搜索功能来过滤列表(有点像在 Delphi IDE 工具面板中),并在可能的情况下使用此组件作为内置编辑器。我现在离这个目标还有很远的路要走!谢谢大家

编辑:Remy - 这是我在 OnSetEditText 中从喙点开始的两个调用堆栈。左边是第一个带有空字符串的火,右边是带有正确字符串值的第二个火。中间的 5 行截断都是对 comctl32.dll 的引用。泰。

Click here for call stack

最佳答案

每当就地编辑器的内容因任何原因更新时,当选择不同值后关闭下拉编辑器时,双击下拉编辑器时,都会触发 OnSetEditText 事件,或调用下拉编辑器的 RestoreContents() 方法。因此,您很可能会收到多个操作,一个接一个地更新编辑器。我建议您在 TCustomDrawGrid.SetEditText() 方法中放置一个断点,并查看每次触发事件时调用堆栈的样子。

关于#2,你从什么派生并不重要。任何 TCustomGrid 后代都可以有一个自定义的就地编辑器。只需重写虚拟 CreateEditor() 方法即可。

关于#3,如果您在直接从 TCustomGrid 派生时遇到抽象错误,则说明您没有正确覆盖其抽象方法。

网格本身就支持模仿组合框的下拉就地编辑器。查看 TInplaceEditList 类。您可以使用 OnGetPickListItems 事件在编辑器中填充值。另外,看看 TValueListEditor 如何实现其自定义编辑器。

关于delphi - TDrawGrid OnSetEditText 触发两次 + 就地编辑器 + TCustomGrid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3303906/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com