delphi - 如何使用 SENDER 优化此代码?

标签 delphi optimization sender

我有一个包含 16 个 TCheckBox 和 32 个 TEditBox 的表单。 每 2 个 TEditBox 的启用取决于复选框的状态。 所以我使用了这段太长的代码:

//T1
procedure TOFAddForm.T1Click(Sender: TObject); 
begin
     Q1.Enabled:=T1.Checked;
     P1.Enabled:=T1.Checked; 
     Q1.OnChange(Sender);
end;

.  
.
.

//T16
procedure TOFAddForm.T16Click(Sender: TObject); 
begin
     Q16.Enabled:=T16.Checked;
     P16.Enabled:=T16.Checked;
     Q1.OnChange(Sender);
end;`

我使用了这段代码,但什么也没发生:

procedure TOFAddForm.T1Click(Sender: TObject);
var Q, P: TEdit;
begin
     with  Sender as TCheckBox do begin
           Q.Name:='Q'+copy(Name,1,2);
           P.Name:='P'+Copy(Name,1,2);
           Q.Enabled:=Checked;
           P.Enabled:=Checked;
     end;
     Q1.OnChange(Sender);
end;

谢谢。

最佳答案

如果所有复选框和编辑的名称一致,您可以将此 OnClick 事件添加到所有复选框:

procedure TOFAddForm.TClick(Sender: TObject);
var 
  C: TCheckBox;
  Q, P: TEdit;
  N: string;
begin
  C := Sender as TCheckBox;
  N := Copy(C.Name, 2, Length(C.Name));
  Q := FindComponent('Q' + N) as TEdit;
  P := FindComponent('P' + N) as TEdit;
  Q.Enabled := C.Checked;
  P.Enabled := C.Checked;
  Q.OnChange(Sender);
end;

关于delphi - 如何使用 SENDER 优化此代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7619228/

相关文章:

image - 德尔福7 :Attach Image to Mouse

delphi - 开源 Delphi 包可使用哪些项目选项?

delphi - 获取 TListView 中选定行的屏幕坐标

c# - 在 C# .NET 中用于在 O(1) 时间内获取项目的“正确”集合?

iphone - 如何识别在 Objective-C 中单击了哪个按钮?

ios - 在按下不同标签的 UIButton 上播放声音

delphi - 编写自定义属性检查器 - 验证值时如何处理就地编辑器焦点?

delphi - 如何在任意类型上调用 GetEnumerator?

ruby - Ruby 计算速度慢?欧拉计划 #5

c++ - 将 x-1 计算成一个变量然后使用它会更好吗?