Delphi技术问询:如何通过按键调用带Sender参数的按钮点击过程
解决Delphi中键盘事件调用按钮点击过程的问题
方法一:直接传入合法的Sender参数
你的问题核心是调用buttonNum0Click时未传入符合要求的Sender参数。在Delphi事件过程中,Sender代表触发事件的对象,你可以直接传入对应的按钮控件;如果该过程里没有实际使用Sender,传入nil也能正常执行:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin case Key of '0': buttonNum0Click(buttonNum0); // 传入按钮控件作为Sender // 或者:buttonNum0Click(nil); (若buttonNum0Click未用到Sender) end; end;
方法二:重构逻辑,解耦事件依赖
更优雅的方式是把编辑框添加字符的逻辑抽成独立过程,让按钮点击和键盘事件都调用这个通用过程,避免依赖按钮的事件过程:
// 新增独立通用过程 procedure TForm1.AppendCharToEdit(const CharToAdd: Char); begin Edit1.Text := Edit1.Text + CharToAdd; end; // 修改按钮点击事件 procedure TForm1.buttonNum0Click(Sender: TObject); begin AppendCharToEdit('0'); end; // 修改键盘事件 procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin case Key of '0': AppendCharToEdit('0'); end; end;
补充说明:小键盘的数字0在OnKeyPress事件中对应的Key值就是'0',当前判断逻辑有效;如果使用OnKeyDown事件,则需要判断Key = vk_Numpad0。
内容的提问来源于stack exchange,提问作者Lucas Franzen
相关产品推荐
相关产品推荐

