- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的表单上有一个 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 的引用。泰。
最佳答案
每当就地编辑器的内容因任何原因更新时,当选择不同值后关闭下拉编辑器时,双击下拉编辑器时,都会触发 OnSetEditText
事件,或调用下拉编辑器的 RestoreContents()
方法。因此,您很可能会收到多个操作,一个接一个地更新编辑器。我建议您在 TCustomDrawGrid.SetEditText()
方法中放置一个断点,并查看每次触发事件时调用堆栈的样子。
关于#2,你从什么派生并不重要。任何 TCustomGrid 后代都可以有一个自定义的就地编辑器。只需重写虚拟 CreateEditor()
方法即可。
关于#3,如果您在直接从 TCustomGrid 派生时遇到抽象错误,则说明您没有正确覆盖
其抽象方法。
网格本身就支持模仿组合框的下拉就地编辑器。查看 TInplaceEditList
类。您可以使用 OnGetPickListItems
事件在编辑器中填充值。另外,看看 TValueListEditor
如何实现其自定义编辑器。
关于delphi - TDrawGrid OnSetEditText 触发两次 + 就地编辑器 + TCustomGrid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3303906/
要从 TCustomGrid 派生新控件并将其获取到 IDE 中的窗体上,而不会在 IDE 中出现“抽象错误”,我至少需要做什么? 我已经尝试了好几天的一切,但我有点像 delphi 菜鸟 atm,T
我的表单上有一个 TDrawGrid(在 D2010 中)。我正在处理我的 OnDrawCell、OnSetEditText、OnSetEditText 等,一切都很好。 但是,如果在特定情况下您进入
我是一名优秀的程序员,十分优秀!