把Form融合到tabsheet中后,form的activecontrol取值不对
自己做了个简单的例子,又取不到值
//form1部分代码
procedure TForm1.Button1Click(Sender: TObject);
var
  tb: TTabSheet;
  frm: TForm2;
begin
  tb := TTabSheet.Create(PageControl1);
  tb.PageControl := PageControl1;
  frm := TForm2.Create(tb);
  frm.Parent := tb;
  frm.BorderStyle := bsNone;
  frm.Align := alCLient;
  frm.Show;
end;
//form2部分代码
//设置eidt1的右键菜单
procedure TForm2.N1Click(Sender: TObject);
var
  cc: TWinControl;
begin
  cc := self.ActiveControl;
  showmessage(cc.ClassName);
end;

解决方案 »

  1.   

    把Form做成Frame吧,这样就可以取到拥有焦点的控件了,如果用From就不行。
      

  2.   

    谢谢
    就怕听到这样的答复,原程序都是写好的dll,我现在是加个壳子来调用,改成frame基本不可行,工作量太大
      

  3.   

    self.ActiveControl;改成哪个Form获取。
      

  4.   

    用form取,不论焦点在哪,好像只能取道form的taborder等于0的控件
      

  5.   

    如果 ActiveControl 不行。
    则可以考虑取出所有的控件看看。
    Form1.Components[i]
      

  6.   

    这是下下策,需要递归搜索判断focused属性
    窗体控件多的情况下,不知道对效率有多少影响
      

  7.   

    如果說sheet數量理想的話,可以用Components
      

  8.   

    不知道是不是理解有問題,你融合以後,你需要在你的主窗體為單位取焦點。例如例子裡面把Form2的那個‘self’ 改為Form1,即:Form1.ActiveControl即可。
      

  9.   

    完全可以,搞定了,我理解form融合到控件中后,就作为一个控件了,可以理解为panel,用主form来取就可以了
      

  10.   

    改成 Screen.ActiveControl