避免输入单引号。但在编译项目时遇到错误:
[致命错误] StdCtrls.pas(1238):使用不同版本的StdCtrls.TEdit编译单元对话框
答案 0 :(得分:8)
您更改了 StdCtrls 单元的界面。这要求所有使用它的单元也要重新编译,甚至是Delphi提供的VCL单元。如果有一种方法可以在不修改德尔福单位的情况下完成目标,那就更喜欢它。
无需提供您自己的 StdCtrls.pas 版本。您需要做的一切都可以通过继承基本TEdit
控件来完成。多年前,Peter Below演示了如何filter the input of an edit control to accept only numbers。您可以调整该代码以接受除撇号之外的所有内容。
简而言之,你这样做:
KeyPress
以拒绝不需要的密钥。 Splash's answer证明了这一点。wm_Paste
消息处理程序,以便从剪贴板中过滤掉不需要的字符。wm_SetText
和em_ReplaceSel
邮件处理程序,以过滤因直接使用Text
和SelText
属性而产生的不需要的字符。答案 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)创建一个新控件。