如果我在表单上有20个面板(非动态)并且想要在鼠标悬停在其上时更改它们的颜色,我可以使用self.color
吗?我试过这个,但它改变了表格的颜色。有人建议我尝试使用panel1.assign(panel1)
将每个面板分配给自己,尽管有一个错误表明TPanel无法分配给自己。我也试过Form1.free
,但这也没有帮助。
我是否必须动态创建面板才能使用Self,还是有其他方式?
答案 0 :(得分:5)
假设您在设计时分配OnMouse(Enter|Leave)
事件处理程序,处理程序将属于您的TForm
类,这就是Self
指针在运行时引用Form对象的原因。使用处理程序的Sender
参数,指向实际触发事件的对象,例如:
procedure TMyForm.Panel1MouseEnter(Sender: TObject);
begin
TPanel(Sender).Color := ...;
end;
procedure TMyForm.Panel1MouseLeave(Sender: TObject);
begin
TPanel(Sender).Color := ...;
end;
答案 1 :(得分:-1)
试试这个:
type
TPanel = class(Vcl.ExtCtrls.TPanel)
protected
procedure MouseEnter; override;
procedure MouseLeave; override;
end;
implementation
procedure TPanel.MouseEnter;
begin
inherited;
Color := clBlack;
end;
procedure TPanel.MouseLeave;
begin
inherited;
Color := clBtnFace;
end;