1。怎么得到控件自己的NAME;
  例如:一个BUTTON1的ONCLICK事件里面
var:
  name:string;
begin
 name:=self.name;//始终是窗体的名字。我想在这里得到本按钮的名字。
end;
2。如下代码。在窗口的ONSHOW里面
var
 i,j:integer;
 str,str1:sting;
 temp:component;
begin
  for i:=form1.componentcount-1 downto 0 do
  begin
    temp:=component[i];
    str:=getname();//得到一个按钮的名字
    str1:=temp.name;
    j:=comparetext(str,str1);
    if j=0 then
       temp.free;///我想在这是这里实现:temp.enabled:=false;(但却不行)
  end;
end;
 请问怎么才能实现我想要的效果呢?即我只想让他不可用。

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Caption := Tbutton(Sender).Name;
    end
      

  2.   

    1.你是对self存在歧义,self在类中只能代表该实例即类的实例。
    所以你可以这样 buttonname := self.Button1.name;  
    注意:self代表类的实例,还有名字最好不要与属性的名字相同,使用其他的名称,如buttonname等。
    2.你第二段代码意图是什么,请讲明,已经发现有明显的语法问题。
      

  3.   

    2
    procedure TForm1.Button1Click(Sender: TObject);
    var
     i,j:integer;
     str,str1:string;
     temp:Tcomponent;
    begin
      for i:=form1.componentcount-1 downto 0 do
      begin
        temp:= Self.Components[i];
        str:= 'Button1';
        str1 :=temp.name;
        j:=comparetext(str,str1);
        if comparetext(str,str1)= 0  then
        begin
          if temp.ClassName = 'TButton' then   
            Tbutton(Temp).Enabled := false;
          //这里很麻烦,你用了多少种控件,一个一个的列吧,:(    end;
      end;
    end;
      

  4.   

    buttonname := self.Button1.name;  
    就是这句
      

  5.   

    if (temp.ClassName = 'TButton') or (temp.ClassName='TBitBtn' ) then   
       Tbutton(temp).Enabled := false;
      

  6.   

    1.没有得到解决。因为按钮本身不是确定的,有可能是Tbutton,也有可能是Tbitbtn 还有可能是菜单按钮,或speedbutton,
    2.第二段程序的代码是想实现在一个窗体SHOW时.逐一判断按钮是不是我得到的那个按钮的名字。
    如果是,则将其enabled置为FALSE;注按钮个数和类型也是在SHOW时不知道的。
    TO miky:
    我的按钮个数和类型都不确定啊。
      

  7.   

    1. TComponent(Sender).Name  //因为所有的可视化组件都从TComponent继承的2.var
     i,j:integer;
     str,str1:sting;
     temp:component;
    begin
      for i:=form1.componentcount-1 downto 0 do
      begin
        temp:=component[i];
        str:=getname();//得到一个按钮的名字
        str1:=temp.name;
        if SameText(str, str1) then
           temp.enabled:=false;
      end;
    end;