Delphi调用onkeypress
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Delphi调用onkeypress相关的知识,希望对你有一定的参考价值。
我想在一个窗体弹出后点击按钮后引发一个回车事件,
Edit1.OnKeyPress(sender,Key);
后面的参数是什麽啊?
[Error] Testhand.pas(173): Types of actual and formal var parameters must be identical
后面的错误是我参数设置sender设为窗体,或是Edit1本身,key为#13都报错
请大侠们指点指点
第二个key 要传地址,所以不能用常量#13,你定义一个char类型c:=#13.
然后txt1KeyPress(txt1,c);保你管用本回答被提问者采纳 参考技术B edit1的OnKeyPress事件:
procedure TLoginForm.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if (key = #13) then //在Edit1输入完后敲入回车键,SpeedButton1执行单击操作
SpeedButton1Click(Sender) ;
end; 参考技术C 调用错误,应该调用事件
比如,Edit1的OnKeyPress事件
TForm1.Edit1KeyPress(Sender,Key) 参考技术D procedure TForm1.Button1Click(Sender: TObject);
var Key: Char;
begin
Key := #97;
Edit1.OnKeyPress(Sender, Key);
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
ShowMessage(Key)
end;
有没有办法在一秒钟后调用 onkeypress 事件,这样它就不会多次触发一个方法?
【中文标题】有没有办法在一秒钟后调用 onkeypress 事件,这样它就不会多次触发一个方法?【英文标题】:Is there a way to call the onkeypress event after a second so that it wouldn't fire a method a bunch of times? 【发布时间】:2021-07-29 13:42:45 【问题描述】:我正在编写一个程序,该程序调用一个使用文本框在表格上显示数据的方法。问题是它每次调用程序超过 10 次。有没有办法避免这种情况?
这是文本框:
<input #input matInput placeholder="Search data" (keyup)="onKeypressEvent($event)">
这是我调用的方法:
onKeypressEvent(event: any)
fromEvent(this.input.nativeElement,'keyup')
.pipe(
debounceTime(150),
distinctUntilChanged(),
tap(() =>
this.paginator.pageIndex = 0;
this.loadData();
)
)
.subscribe();
【问题讨论】:
【参考方案1】:发生这种情况是因为每次按键都会创建一个新链,因此debounceTime()
没有什么可以去抖动。而是制作一个主题并按下按键。然后在构造函数或 onInit() 中只订阅一个:
keyPress$ = new Subject();
...
keyPress$.pipe(
debounceTime(150),
distinctUntilChanged(),
tap(() =>
this.paginator.pageIndex = 0;
this.loadData();
),
).subscribe();
...
onKeypressEvent(event: any)
this.keyPress$.next(event);
);
【讨论】:
您可以将tap
代码移动到subscribe
方法。结果相同,但我猜更容易阅读
@martin 数据加载速度变慢是有原因的还是因为去抖动时间?
@kajl16 这就是debounceTime
所做的。也许看看auditTime
和sampleTime
和throttleTime
【参考方案2】:
根据您现有的代码,您似乎正在使用@viewChild()
。
这是简单而有效的解决方案。这样可以避免使用额外的Subject
。
ngAfterViewInit()
fromEvent(this.input.nativeElement, "keyup")
.pipe(debounceTime(1000)) // Update the debouceTime as per your wish
.subscribe((val: KeyboardEvent) =>
console.log(this.input.nativeElement.value);
);
别忘了在onDestroy
退订。
【讨论】:
以上是关于Delphi调用onkeypress的主要内容,如果未能解决你的问题,请参考以下文章