Delphi 怎样获得当前活动窗体上的指定类型控件?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Delphi 怎样获得当前活动窗体上的指定类型控件?相关的知识,希望对你有一定的参考价值。

比如说我现在有 Form1 上面有多个Tabsheet,而每个TabSeet上又都有一个DBGrid,我怎么样才可以取得当前显示页的DBGrid呢?
不好意思,可能是我说的不是很清楚,我用的是MDI框架,我想在主窗体(MainFrm)上做一个刷新的按钮(RefreshButton),在我点RefreshButton的时候,自动抓取当前活动Tabsheet上的DBGrid.DataSource.DataSet。不知道我这个思路是不是有点问题!

参考技术A 大哥,每个DBGRID都有他自己的名字,你直接调用名字不就好了?不管你是N个TABSHEET还是一个页面上有多个DBGRID,他们都是有名字的,第一个拖上去的就叫DBGRID1,第二个就叫DBGRID2,此外,你还可以在NAME属性里对其重新命名。使用的时候调用不同的名字就可以了。。。。追问

不好意思,可能是我说的不是很清楚,我用的是MDI框架,我想在主窗体(MainFrm)上做一个刷新的按钮(RefreshButton),在我点RefreshButton的时候,自动抓取当前活动Tabsheet上的DBGrid.DataSource.DataSet。不知道我这个思路是不是有点问题!

参考技术B procedure TForm1.Button3Click(Sender: TObject);
var
i: Integer;
begin
for i := 0 to Self.ComponentCount - 1 do
begin
if Self.Components[i] is TDBGrid then
begin
if (Self.Components[i] as TDBGrid).Parent.Name =
PageControl1.Pages[PageControl1.TabIndex].Name then
begin
ShowMessage('当前DBGrid的名字是:'+(Self.Components[i] as TDBGrid).Name);
end;
end;
end;
end;追问

不好意思,可能是我说的不是很清楚,我用的是MDI框架,我想在主窗体(MainFrm)上做一个刷新的按钮(RefreshButton),在我点RefreshButton的时候,自动抓取当前活动Tabsheet上的DBGrid.DataSource.DataSet。不知道我这个思路是不是有点问题!

追答

把 ShowMessage('当前DBGrid的名字是:'+(Self.Components[i] as TDBGrid).Name);
换成 (Self.Components[i] as TDBGrid).DataSource.DataSet.Refresh;然后跳出循环就可以了

要学会举一反三.我写的只是个例子

追问

可是如果我有一部分的DBGrid不是在TabSheet上而是直接在From上呢?
我想我需要的是一个API函数,而不是循环

追答

有这种API函数吗?..你在这样钻你会死在里面的,换个思想去考虑这个问题吧

参考技术C 首先你要知道这个DBGRID的名字,例如:
if Self.FindComponent('DBGrid1') <> nil then
do something追问

不好意思,可能是我说的不是很清楚,我用的是MDI框架,我想在主窗体(MainFrm)上做一个刷新的按钮(RefreshButton),在我点RefreshButton的时候,自动抓取当前活动Tabsheet上的DBGrid.DataSource.DataSet。不知道我这个思路是不是有点问题!

参考技术D 我有一个进销存,你把邮箱发给我咯,但是我是通过VS2010开发的开发模式是MVC2.0页面都是asp.net的你要的话给我邮箱
郁闷都要给你发你要不本回答被提问者采纳

以上是关于Delphi 怎样获得当前活动窗体上的指定类型控件?的主要内容,如果未能解决你的问题,请参考以下文章

delphi 如何获得一个窗体中有多少控件

怎样使delphi里的控件随窗体的大小变化而变化

delphi7 如何描述窗体上的全部控件

Delphi 窗体中怎样嵌入网页

delphi获取窗体的句柄

delphi 怎样绘制半透明窗体,只让窗体背景半透明,而窗体里面的控件 不透明