为何在FORM2中使用 n:=FORM1.DbGrid1.SelectedRows.Count 值为空? 而在FORM1中直接使用又是正常的!(50分)

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

del520

Unregistered / Unconfirmed
GUEST, unregistred user!
如题!
为何在FORM2中使用 n:=FORM1.DbGrid1.SelectedRows.Count 值为空?
而在FORM1中直接使用又是正常的!
 
再把问题说清楚一点啦,form2必须要use unit form1才行。
 
并且在执行时,form1必须运行!或前台或后台!
 
这个放心了,肯定是有的(USES)。

在FORM1中有一个DBGrid,用CTRL+左键选择一些行之后,打开FORM2,

在FORM2中发现使用FORM1.DbGrid1.SelectedRows.Count 返回值居然为0。
试着在FORM1下试试,返回的数目则是正常。
 
TO 银雨辰

我的FORM1还是主FORM。
 
with Form1 do
begin
form2.edit1.Text:=inttostr(DbGrid1.SelectedRows.Count);
end;
*****************************
调试通过!
 
到 form2 时 form1 失去焦点,当然 dbgrid 也不会有选择。

设置 dbGrid 的 dgAlwaysShowSelection 为 true

在属性窗口的 options 中。
 
在form1中当然正常,
你最好定义一个全局变量,用来保存(不推荐)。
或者form1定义一个
public GetSelectCount:Integer;
用来在Form1之外取得你要的值。
或者用一个form1的变量来保存,在form2中访问这个变量。
 
谢谢大家的参与
刚刚做了测试,问题并不是大家想像的那样,这里我发现一个微妙的问题,真是很奇怪。

我在FORM1中使用N:=DbGrid1.selectedRows.Count,然后ShowMessage(intToStr(n))正常。
但我使用N:=FORM1.DbGrid1.SelectedRows.Count 则不管是否选择N为0!
很奇怪,于是我在FORM搞一个按钮加上命令 : ShowMessage(name)按理说应该显示 'FORM1'
但却显示为FORM_1 ?????这是为什么啊!!

当然,我所说的FORM1,只是个举例简单化,实际我的程序中并不是FORM1(主FORM)!!
 
implementation

uses Unit1;

{$R *.DFM}

procedure TForm2.FormCreate(Sender: TObject);
var
n:integer;
begin
with Form1 do
begin
n:= DbGrid1.SelectedRows.Count;
form2.edit1.Text:=inttostr(n);
end;
end;
把问题说清楚点吧!
 
难道你的单元中有多个 DbGrid1
 
没有多个DBGRID1

现在发奇怪问题了。就是我上面说的。
我的实际环境如下:

在FORM1中有一PANEL1
然后使用用一按钮。
form2:=Tform2.create(self);
form2.parent:=form1.panel1
form2.show;
然后设置form2.align:=alclient,无边框等。。。

这样点这个按钮,FORM2就会完全显示在form1.panel1这中,看上去就像是FORM1的一部分。
按理说这样搞一下,form2.name应该不会改变。

但是的确是变了,我在FORM2上放一按钮,命令使用:showMessage(name);
应该显示FORM2,可显示为FORM2_1 。
所以我主题上的 n:=form2.dbGrid1.selectedRows.count 返回值不对可能就是这个原因!
因为我使用dbGrid1.selectedRows.count又是正确的,只不过是没有加form2. 。

我正在找原因。。。。。
 
后退
顶部