【发布时间】:2020-02-22 12:27:01
【问题描述】:
我使用的组件是 TStringGrid 的后代,称为 TDataGrid(可以在 Torry 上找到)。不幸的是,它有一个小错误,原来的 TStringGrid 组件中似乎没有。我启用了 goEditing 和 goAlwaysShowEditor 选项,因此我希望在控件接收到输入焦点时选择单元格的文本。但在 TDataGrid 的情况下,如果我按 TAB 从一个控件移动到网格控件,则不会发生这种情况。它接收输入焦点,但没有选择任何内容,并且插入符号甚至不可见。显然,这对用户来说是非常误导的。
原来的 TStringGrid 组件也有类似的不一致,如果您启用了 goAlwaysShowEditor,总会有一个单元格的文本“暴露”(聚焦、有点、甚至如果网格控件本身没有焦点),所以如果您在该单元格中左键单击,它也不会选择文本,只需启用插入符号。然而,我已经能够解决这个问题,只需在网格控件没有焦点时禁用 goAlwaysShowEditor,然后在网格获得焦点时启用它。
那么 TStringGrid 有没有办法选择单元格的文本?我知道如何将焦点设置到单元格,但我还没有找到一种方法来实际选择文本。真的很感激任何解决这个问题的想法!
FWIW,我使用的是 Delphi 10.3
【问题讨论】:
-
我无法重现您的问题(或者不清楚您的期望)。我有一个带有 stringgrid 的表单,按 Tab 键顺序,它介于 2 个 TEdits 之间,并且设置了您的 SG 选项。当窗体第一次显示时,Edit1 被聚焦并且它的文本被选中。此时,单元格[1,1] 中的文本以默认的浅蓝色背景显示。无论我按 [Tab] 还是单击单元格 [1,1],焦点都会转移到该单元格并选择其内容,这是我所期望的。您期望或得到什么不同?
-
@MartynA 你测试过 TDataGrid 吗? TABing 进入控件的问题似乎特定于该组件。
-
没有。我没有或想安装它。但我不明白你在 q 的第 2 段中描述的行为。
-
@MartynA 我会尝试改写。假设您启用了 goEditing 和 goAlwaysShowEditor,并且单元格 [1,1] 中的一些文本(以编程方式添加),然后左键单击(鼠标)单元格 [1,1]网格显示后不会立即标记文本。相反,您只需在已公开的就地编辑器中在您单击的任何坐标处设置一个插入符号。希望能解决这个问题。
-
抱歉,如果我这样做了,单元格[1,1] 的文本会立即被选中,并在其 RH 端显示一个插入符号。这是在一个准系统项目中,其唯一的代码是设置单元格文本的代码,并且所有属性都处于它们的调色板默认值,除了 2 SG 编辑选项。如果您当前的项目有更多代码或属性设置,我建议您尝试这样的新项目。
标签: user-interface delphi tstringgrid