如何在delphi中禁用某些键
我在我的程序中添加了以下代码,据我所知,这些代码必须禁止输入字母。 我将窗体的KeyPreview属性设置为True, 接下来我添加了这个代码如何在delphi中禁用某些键,delphi,delphi-7,Delphi,Delphi 7,我在我的程序中添加了以下代码,据我所知,这些代码必须禁止输入字母。 我将窗体的KeyPreview属性设置为True, 接下来我添加了这个代码 procedure FormKeyPress(Sender: TObject; var Key: Char) ; 定义为 procedure TFibo.FormKeyPress(Sender: TObject; var Key: Char); begin if Key in ['a'..'z'] then Key := #0 end;
procedure FormKeyPress(Sender: TObject; var Key: Char) ;
定义为
procedure TFibo.FormKeyPress(Sender: TObject; var Key: Char);
begin
if Key in ['a'..'z'] then Key := #0
end;
这似乎不起作用,因为我可以在表单的编辑组件中输入a-z;我做错了什么
这是我的程序代码
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TFibo = class(TForm)
lblInput: TLabel;
edtInput: TEdit;
procedure FormKeyPress(Sender: TObject; var Key: Char) ;
end;
var
Fibo: TFibo;
implementation
{$R *.dfm}
procedure Tfibo.FormKeyPress(Sender:TObject;var Key:char);
begin
if Key in ['a'..'z', 'A'..'Z'] then
Key := #0
end;
end.
你没有提到Delphi版本。如果您使用的是Unicode之前的版本,只需确保同时处理小写和大写字符,如下所示:
if Key in ['a'..'z', 'A'..'Z'] then Key := #0;
如果使用Unicode delphi,请包含字符
单元,然后尝试以下操作:
if TCharacter.IsLetter(Key) then Key := #0;
或者您可以尝试使用API函数:
if IsCharAlpha(Key) then Key := #0;
您的代码运行良好,因为它阻止了“a”到“z”。也许您的问题是它不阻止大写字符。为此,您需要:
if Key in ['a'..'z', 'A'..'Z'] then
Key := #0
在字里行间阅读时,似乎希望允许使用大写字母,但不允许使用小写字母。与其过滤小写字符,为什么不将editbox的
CharCase
属性设置为ecUpperCase
?这样,输入的所有字符都转换为大写。问题得到解决。在事件选项卡中设置OnKeyPress
事件有效
使用表单的对象检查器设置OnkeyPress事件。我已经编写了代码,但没有通过对象检查器分配事件。因此,事件未注册,也未触发 您使用的是什么版本的Delphi?它在D5和D2009中都能工作。
如果不能(输入['0'..'9','.'.]),那么将其限制为数字和小数点不是更好的选择吗?否则,你会阻止e而不是ë…而不是回答问题,结束这个问题的正确方法是你自己用答案回答问题,然后接受这个答案。。。。或者请Marjan善意地将她的评论转化为可以接受的答案。@Cosmin@Marjan是的,那会更好。我特别说过我可以输入a-z;我从来没有提到过A-Z。@sunandan问题是,如果你采取你提到的步骤,那么“A”到“Z”就会被阻止。在一个空的应用程序中试用。@sunandan:您确定FormKeyPress事件处理程序已连接到窗体的事件吗?如果处理程序没有执行,则代码不会执行任何操作,因为流媒体系统没有分配OnKeyPress属性。使用对象检查器检查表单的OnKeyPress事件是否实际列出了FormKeyPress。@sunandan,如果您使用Unicode Delphi(2009+),则只需要字符
单元。在Delphi 7上,第一个变体工作得非常好,实际上我在发布之前就试过了。@sunandan字符单位与Delphi 7无关。你的主要问题是你所描述的问题无法重现。请详细说明这个答案,因为它目前的形式对其他人没有帮助。我猜大多数用户都是通过双击Object Inspector中的OnKeyPress
来创建FormKeyPress
过程的,因为这会自动创建一个具有正确签名的过程,并选择它作为OnKeyPress
的处理程序。请不要“窃取”Marjan在其中一条评论中提供的答案!