delphi – 带有BOTH编辑和范围选择的TStringGrid?
题:
任何人都可以指向任何地方的文章或代码示例如何 是的,我知道有第三方网格可以做到这一点,但确实如此 背景: 期望能够在网格中编辑单元格是很正常的, 交付时,TStringGrid不会这样做.它是/或.事实上, 但是,看起来可以进行编辑和范围选择 解决方法
我没有使用过TStringGrid,所以我无法提供具体的答案.但我是否正确假设你可以
manually (in code) start a cell being edited?该链接意味着即使网格没有在其选项中包含goEditing也是可能的. (如果不是这样,请参见下文解决此问题.)
如果是这样,我建议采用以下方法: 组合选择和编辑行为 我发现这是一种很好的,Windows标准行为的方法: >将网格保留为选择模式,因此鼠标和键盘交互选择单元格 >选择是正常的.即,单击选择,单击并拖动以进行多选,使用键盘箭头和Shift或Control进行选择等. >选择一个单元格,用户按Enter键或F2键(F2是标准的“重命名”或“编辑”快捷键,可在多个程序中使用) 我也倾向于检查鼠标位置,这样如果一个对象慢速双击并且没有首先被选中(即,这两个选择对象然后进入编辑模式)我验证鼠标没有移动许多.我使用 const int iMAX_MOVE_AMOUNT = :: GetSystemMetrics(SM_CYDOUBLECLK)* 2; (对不起,C不是德尔福,但应该可以轻松转换!) 但我实际上不确定这是否完全和完全100%的Windows指南.在实践中,用户发现它的工作正如他们所期望的那样.) 这应该让您在适当的时候用键盘和鼠标在选择和编辑之间进行切换. 杂想 通过继承TStringGrid并创建新组件,您可能会发现其中一些更简洁,更容易实现.这将允许您在普通代码中实现它并覆盖内置行为(而不是事件处理程序),同时使其对表单代码不可见.它还将为您提供对鼠标事件或Windows消息的低级访问,而不仅仅是通过OnMouseDown等事件公开.最后,如果在选项中包含goEditing时显示编辑器时出现问题,这将允许您更改该行为.如果您希望代码响应某些事情,例如创建OnBeginEdit事件,您也可以添加自己的事件. 创建自己的组件通常被认为是一个高级Delphi主题,但一旦你知道如何,它实际上非常容易! This site有一些很好的主题,一般会向你介绍这个主题,如果你走这条路并遇到问题,Stack Overflow当然是一个提问的好地方:) Embarcadero Delphi ? VCL ? Writing Components新闻组/论坛也是一个很好的资源事实上,对于这一特定主题,甚至可能比SO更好. 希望有所帮助! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |