代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var tn:ttreenode;
begin
  t1.Items.Clear;
  tn:=t1.Items.Add(nil,'aa');
  tn:=t1.Items.AddChild(t1.TopItem,'aa1');
  tn:=t1.Items.AddChild(t1.TopItem,'aa2');
end;procedure TForm1.SpeedButton1Click(Sender: TObject);
var tn:ttreenode;
begin
  t1.Items.Clear;
  tn:=t1.Items.Add(nil,'aa');
  tn:=t1.Items.AddChild(t1.TopItem,'aa1');
  tn:=t1.Items.AddChild(t1.TopItem,'aa2');
end;procedure TForm1.t1Click(Sender: TObject);
begin
label1.Caption:=t1.Selected.Text;
end;点击T1的时候,用TSPEEDBUTTON添加的运行会有错误!!(不是每次都错,但经常会错!)
求教!!
谢谢!

解决方案 »

  1.   

    procedure TForm1.t1Click(Sender: TObject);
    begin
      if t1.Selected<>nil then  //~~~
      label1.Caption:=t1.Selected.Text;
      {why??
       因为Button1可以得到焦点,当再次点击t1时,t1得到焦点,topitem自动选中
       speedbutton虽然没有焦点,但会让t1的Selected变成nil,再次点击t1,由于焦点
       还在t1上,所以topitem不会selected,t1.Selected.Text访问错误   不是每次出错,因为有几次你直接点到topitem上的}end;
      

  2.   

    同意楼上的不过应该在OnChange里面写比较好吧?
    当然
    也要判断Node是不是nil因为
    把Selected设为nil也会触发OnChange
    嘿嘿
      

  3.   

    点击T1的时候,用TSPEEDBUTTON添加的运行会有错误!!(不是每次都错,但经常会错!)
    求教!!
    谢谢!
    ---------------------------------------
    难道button添加的node运行起来没有问题吗?
    我同意楼上的说法,好像是搂住没有做针对性地测试
    从表面现象误以为button和speedbutton不同把
      

  4.   

    同意是焦点的问题,加一个判断,tl.selected<>nil
      

  5.   

    可能是Focus的问题吧http://lysoft.7u7.net
      

  6.   

    jinjazz分析的很有道理如果還有人要做測試的話,可以分兩種情況,
    首先:在窗體上放置一個TButton,TSpeedButton,TTreeView,再放一個可以得到焦點的控件
    如:TEdit
    第一種測試:將焦點定在TEdit上面,然後點TSpeedButton,再點TTreeView,此時,不會有問題的
    第二種測試:將焦點就定在TTreeView上面,然後直接點TSpeedButton,再點TTreeView,就會出錯
    如果此時,我們在label1.Caption:=t1.Selected.Text;設置斷點,可以發現t1.Selected為nil而點TButton則不會有這樣的問題,道理就是 jinjazz所說的
      

  7.   

    蝎子王,我的问题结贴了,想看看我对你的评价吗?
    http://community.csdn.net/Expert/topic/3891/3891979.xml?temp=.9497644
      

  8.   

    还不结可就真是RPWT了.....呵呵....开个玩笑
      

  9.   

    谢谢各位的指导
    其实当天就解决问题了
    只是不知道原因
    得jinjazz(近身剪(N-P攻略)) 提示才想起来是focus的问题
    谢谢
    不结贴是因为封闭了一段时间不能上网
    今天赶快把贴结了
    要不就真的是rpwt了
    还有补充一句
    我无比敬重BORLAND的开发团队
    也肯定这个是自己的问题
    写这个题目只是小小搞一个笑
    调侃自己一下
    但如Love_birds(蝎子王)把这个问题上升到这么高的一个高度
    实在让我受宠若惊阿
    希望您老在抽象拔高问题的同时,能对问题多提点有意义的建议
    谢谢了!:)