如果我在窗体上有20个面板(不是动态的),并且想要在鼠标悬停在它们上面时更改它们的颜色,我可以使用self.color
?我试过这个,但它改变了窗体的颜色。有人建议我尝试使用panel1.assign(panel1)
将每个面板分配给自己,但有一个错误表示TPanel不能分配给自己。我也试过Form1.free
,但那也没有帮助。是否可以使用.self来创建未动态创建的组件?
我是否必须动态创建面板才能使用Self或者有其他方法吗?
如果我在窗体上有20个面板(不是动态的),并且想要在鼠标悬停在它们上面时更改它们的颜色,我可以使用self.color
?我试过这个,但它改变了窗体的颜色。有人建议我尝试使用panel1.assign(panel1)
将每个面板分配给自己,但有一个错误表示TPanel不能分配给自己。我也试过Form1.free
,但那也没有帮助。是否可以使用.self来创建未动态创建的组件?
我是否必须动态创建面板才能使用Self或者有其他方法吗?
试试这个:
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;
或者使用'Sender'参数来对应'OnXXX'事件 –
事实上,同一单元中的其他面板呢? –
@Jerry,真的。我会删除这篇文章以支持其他答案,但它已被锁定。 – Victoria
假设你要分配在设计时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;
我不明白。你为什么会认为['Self'](http://www.delphibasics.co.uk/RTL.asp?Name=Self)能以某种方式知道你想引用面板? 'Self' * always *引用代码的当前类上下文。我也不知道你为什么认为动态创建它们会让你使用'Self'。这更不适用。我无法看到使用“Self”和在表单上创建面板之间的任何相关性。 –
我以为'Self'是指代码所在的组件,我在面板的OnMouseEnter事件中改变它们的颜色。有没有一种方法可以根据编写代码的组件事件来引用组件? – User09871
'自我'是指当前的实例。我猜你的情况会涉及到一个表格。不是你想要的。这不幸是一个XY问题。你问到“Self”,但我们没有告诉你关于“Self”的帮助,因为它不是真正问题的解决方案。询问真正的问题。不要问你的非工作解决方案。 –