【问题标题】:DBEdit allow to delete value while DataSource.AutoEdit is falseDBEdit 允许在 DataSource.AutoEdit 为 false 时删除值
【发布时间】:2012-10-05 07:33:09
【问题描述】:

美好的一天!

我有一个查询、数据源和 DBEdit。 DataSource.AutoEdit 为假。 Query.State 不在 dsEdit 或 dsInsert 中。所以我无法更改 DBEdit 中的值。但是如果我按 Delete 键,DBEdit 中的值会被删除(Query.State 不会改变)。如果焦点离开此 DBEdit,我会收到“数据集未处于编辑或插入模式”。这是一个错误还是其他什么,我该如何解决这个问题?我已经在新的简单项目中对此进行了测试,以确保问题不在我的项目中。

Delphi 版本:Delphi® XE 版本 15.0.3953.35171

【问题讨论】:

  • 我该如何解决这个问题? 嗯,卡罗尔几年前回答过这个问题:“我应该去哪里?” - 爱丽丝。“这取决于你想在哪里结束.” - 柴郡猫。// ESR 也回答了:catb.org/esr/faqs/smart-questions.html#goal // 没有人,但你知道你的程序应该如何运行,你可以告诉它或隐藏它......
  • “这取决于你想在哪里结束。”我希望 TDBEdit 正常工作。如果将 AutoEdit 设置为 false,则 DBEdit 必须是只读的(对于包括 Delete 在内的所有键)。
  • 在一个简单的项目中,只有一个 DBGrid、一个 DBNavigator、一个 DBEdit、一个 DataSource、一个 ADODataSet、一个字段,它对我来说表现正确。不处于编辑状态时,Delete 键被抑制。还有德尔福XE。什么时候不工作?
  • hvd,我用一个 DBEdit、一个 ADOQuery 和一个 DataSource 创建了新项目。然后将 AutoEdit 设置为 false,当查询未处于编辑状态时,不会抑制 Delete Key。我知道这是不寻常的情况,这就是我在这里问的原因。
  • @GaaraofDesert 我的 Delphi 版本和你的一样,它对我有用,所以我认为抑制它的代码必须在那里,但是抑制它的代码是错误的,因为它不会不能在所有系统上工作(并且不能在你的系统上工作)?

标签: delphi datasource


【解决方案1】:

我认为您可以将TDBEdit.ReadOnly设置为true,当数据集不处于编辑状态并将其更改为数据集state changes


Google 在第 5 个链接中显示 bug report

【讨论】:

  • 我确实认为这是一个错误,或者至少是不必要的不​​一致。 AutoEdit = False 意味着您无法编辑字段,除非您手动更改数据集的状态,这反映在 DBEdit 在几乎所有情况下都是只读的其他而不是 Delete 键。那么为什么 Delete 键不同呢?
  • 不,我正在手动管理编辑状态。如果我将 AutoEdit 设置为 false,我希望表单上的所有 DBedit 都是只读的。而且它们是只读的(我不能更改任何值,不能粘贴或剪切或输入新值)。但是“删除”键会删除符号。看来 AutoEdit 对 VK_DELETE 没有影响。
  • @hvd 这些情况是什么?我敢打赌,当字段或数据集明确设置为只读时。情况并非如此。可以说这可能是糟糕的设计,但不是直接的错误。
  • @Arioch'The 常规编辑。在链接到未处于编辑状态且 AutoEdit = False 的数据源的 DBEdit 中键入一个字符,不会发生任何事情。
  • 那么显然可以 1) 通过 TDbEdit 子类(创建祖先)/2) 子类 DataSource 以调整 db-edits 3) 修补 TDbEdit VMT 以更改对 VK_DELETE 的反应
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-13
相关资源
最近更新 更多