一个原本简单的东西弄得我头痛了,来问问:有哪些情况可能会影响在一个form中根本无法控制另一个form的控件?(50分)

  • 主题发起人 主题发起人 del520
  • 开始时间 开始时间
D

del520

Unregistered / Unconfirmed
GUEST, unregistred user!
在一个form中无法控制另一个form的 checkBox控件,可能会有哪些原因?

我的环境有点复杂,一下子难以说清,只能这问了,然后说大个大概情况的:
一个MainForm,一个form2 ,form2上有checkbox1
Mainform上有个panel1,form2完全显示在panel1里面.(当然整个环境还比较复杂)
现在我在mainform上点一个按钮来控制form2上的checkbox1居然失效,但我用
showMessage(form2.Checkbox1.caption)又有用.用form2.checkbox.checked:=true根
本就没反映.



我试着新建一个工程,模仿着建立两个FORM1,FORM2,然后以FORM1上控制FORM2的CHECKBOX
又可以,所以我想肯定是我那个程序那里有点什么毛病,但头痛了都没弄出来.
 
按你说的,应该可以的呀

建议你把那个工程一样样组件去除,再运行,从而找出问题所在
 
你checkbox的“父控件”的enable属性是否也是true呢?
 
form2.Repaint;

form2.Invalidate;
form2.Update;
 
to shaga
我模仿着试也不行,只差这样做了.
to gydldfw
checkbox 的你控件肯定是enabled的,我在form 中加一个按钮来试,又可以.
to zfsfj
我马上试试你的方法.
---------
谢谢你们.
 
TO ALL
还是不行,但我发现了一个问题.

我要是在form2下使用 
checkbox1.checked:=true可以.
但如果我使用
form2.checkbox1.checked:=true 都不行.

我用的是 xp+d7 是不是有什么BUG??
 
你可以看看你在MainForm的Panel1上的那个 TForm 是不是你动态创建的,
而你使用的 Form2.Checkbox1.Caption 的 From2 是原来的全局变量。
也就是说你是不是没把 Delphi 自动给你声明的 Form2 放在 Panel1 上而是
重新又创建了一个,如果是这样,那你通过 Form2 当然不能改变 Panel1 上的
那个 TForm2 的实例了

 
楼上的有道理
 
我的form,还有panel都不是动态创建的.

我在mainform.一个按钮.
form2.parent:=panel1;
form2.show;
就这样...

但的确,在我的form2上有不少的panel,这个checkbox至少都是放到好几层panel之上了,
查我想这应该没什么问题吧.

to 放飞
估计与你分析的有一定关系,但可能是不动态创建的原因,你建议我怎样检查好?
 
啊,问题解决了.

原因: 我的form2在启动的时候就已装入的.
但我在调用的时候多此一举,使用了 form2:=tform.create(self);
看来我要多看看书上的理论知识了.
谢谢各位.
 
你先描述一下你的 MainForm 上的 Panel1上有多少个 Form2?
如果你的Panel1 上只有一个 From2 那么,如下的代码可以检测出Panel1
上的那个 Form2 是不是你想想的From2
随便在MainForm上方一个按钮,在按钮的单击事件上写如下代码
var
i: Integer;
begin
for i := 0 to Panel1.ControlCount - 1 do
begin
if (Panel1.Controls is TForm2) then
Caption := IntToStr(Integer(Panel1.Controls));
end;
Caption := Caption + '|' + IntToStr(Integer(Form2));
end;
然后比对一下两个值是否相等,如果不相等,一定不是一个实例
(你也可以用这种方式测试一下那个 Checkbox1 是不是一个,
或者干脆直接用 TForm2(Panel1.Controls)代替 Form2 来
访问你想访问的 Checkbox1)
 
后退
顶部