在StdCntrls单元中覆盖TEdit类中的默认KeyPress方法

时间:2010-09-02 12:23:18

标签: delphi

避免输入单引号。但在编译项目时遇到错误:

  

[致命错误] StdCtrls.pas(1238):使用不同版本的StdCtrls.TEdit编译单元对话框

3 个答案:

答案 0 :(得分:8)

您更改了 StdCtrls 单元的界面。这要求所有使用它的单元也要重新编译,甚至是Delphi提供的VCL单元。如果有一种方法可以在不修改德尔福单位的情况下完成目标,那就更喜欢它。

无需提供您自己的 StdCtrls.pas 版本。您需要做的一切都可以通过继承基本TEdit控件来完成。多年前,Peter Below演示了如何filter the input of an edit control to accept only numbers。您可以调整该代码以接受除撇号之外的所有内容。

简而言之,你这样做:

答案 1 :(得分:3)

只需编写OnKeyPress事件处理程序:

procedure TMyForm.EditNoSingleQuotes(Sender: TObject; var Key: Char);
begin
  if Key = '''' then Key := #0;
end;

或继承自TEdit并覆盖KeyPress方法:

procedure TMyEdit.KeyPress(var Key: Char);
begin
  if Key = '''' then Key := #0;
  inherited KeyPress(Key);
end;

答案 2 :(得分:2)

VCL的源代码可供读取和调试,但许可证不允许您进行更改并分发这些更改(至少据我所知)。

在您的情况下,如果您想在多个表单或项目中重用此控件,最好从TEdit(或TCustomEdit)创建一个新控件。