delphi如何按照控件的左右顺序来遍历窗体中的每个控件
delphi默认是按照控件添加进窗体的顺序来遍历的,
有没有哪个属性能控制这个/??

更多0分享到:
 

回复次数:13

关注
case5166
我看见佛
本版等级:

 
#1 得分:10回复于: 2012-03-11 13:42:18
没有的,

Delphi/Pascal code

 

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
object Form1: TForm1
  Left = 226
  Top = 153
  Width = 696
  Height = 480
  Caption = 'Form1'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  Menu = MainMenu1
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
    object Edit1: TEdit
    Left = 336
    Top = 128
    Width = 121
    Height = 21
    TabOrder = 2
    Text = 'Edit1'
  end
  object Button1: TButton
    Left = 208
    Top = 296
    Width = 75
    Height = 25
    Caption = 'Button1'
    TabOrder = 0
  end
  object Button2: TButton
    Left = 408
    Top = 272
    Width = 75
    Height = 25
    Caption = 'Button2'
    TabOrder = 1
    OnClick = Button2Click
  end
 
  object Edit2: TEdit
    Left = 368
    Top = 32
    Width = 121
    Height = 21
    TabOrder = 3
    Text = 'Edit2'
  end
  object Edit3: TEdit
    Left = 200
    Top = 64
    Width = 121
    Height = 21
    TabOrder = 4
    Text = 'Edit3'
  end
  object RadioButton1: TRadioButton
    Left = 128
    Top = 40
    Width = 113
    Height = 17
    Caption = 'RadioButton1'
    TabOrder = 5
  end
  object MainMenu1: TMainMenu
    Left = 232
    Top = 96
  end
end


Delphi是根据这里定义的次序进行加载的,所以此处Components[0]为Button1
如果控制焦点的话是TabOrder这个属性

关注
case5166
我看见佛
本版等级:

 
#2 得分:0回复于: 2012-03-11 13:43:37
object Edit1: TEdit
    Left = 336
    Top = 128
    Width = 121
    Height = 21
    TabOrder = 2
    Text = 'Edit1'
  end
第一个应该是object Edit1: TEdit,看错了下
  
关注
mashengxuucom
mashengxuucom
本版等级:

 
#3 得分:0回复于: 2012-03-11 13:47:43
那controls[0]呢?
Components[0]和controls[0]有啥区别
我又如何才能改变这个次序,望指教.
关注
fjb577128504
fjb577128504
本版等级:

 
#4 得分:0回复于: 2012-03-11 13:48:01
好东西啊
关注
sgzhou12345
山东蓝鸟贵薪
本版等级:

 
 
#5 得分:0回复于: 2012-03-11 13:49:05
case5166
对就是这位仁兄的说法
关注
mashengxuucom
mashengxuucom
本版等级:

 
#6 得分:0回复于: 2012-03-11 14:36:54
那如何实现对panel上的所控件进行位置排序,比如panel上有三个控件,添加进panel中的顺序分别是btn1,btn2,btn3,left小的排在左边,(btn2.left>btn3.left>btn1.left,排列的顺序就为btn1,btn3,btn2)
这种如体实现??
关注
SQLDebug_Fan
SQLDebug_Fan
本版等级:

 
 
#7 得分:0回复于: 2012-03-11 15:19:04
可以用Panel.Components[0]来取得控件,然后判断是否是Button,如:
if Panel.Component[i] is TButton then
关注
case5166
我看见佛
本版等级:

 
#8 得分:0回复于: 2012-03-11 15:44:18
引用 6 楼 mashengxuucom 的回复:

那如何实现对panel上的所控件进行位置排序,比如panel上有三个控件,添加进panel中的顺序分别是btn1,btn2,btn3,left小的排在左边,(btn2.left>btn3.left>btn1.left,排列的顺序就为btn1,btn3,btn2)
这种如体实现??

Delphi/Pascal code

 

?

1
2
3
4
5
6
7
8
9
10
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
 
  for i:= 0 to self.ComponentCount - 1 do
  begin
     if Components[i].name = 'Button4' then
    ShowMessage(Components[i+1].Name);
  end;
end;

存细观察下可以发现DELPHI的添加次序还是很有规律的
在PANEL下则只需调整PANEL内的元件次序就可以了,

(Components[i] as TControl).Left := (Components[i+1] as TControl).Left+10;这类代码来调整

关注
case5166
我看见佛
本版等级:

 
#9 得分:0回复于: 2012-03-11 15:48:37
引用 3 楼 mashengxuucom 的回复:

那controls[0]呢?
Components[0]和controls[0]有啥区别
我又如何才能改变这个次序,望指教.

参考http://www.cnblogs.com/del/archive/2008/10/23/1317862.html

关注
mashengxuucom
mashengxuucom
本版等级:

 
#10 得分:0回复于: 2012-03-15 13:27:41
class procedure myformUtil.AdjustToolBar(aContainer: TWinControl;
  bIsVert: Boolean; iSpace, iInitPosition: Integer);
var
  col: TControl;
  ls: TStringList;
  i: Integer;
begin
  if iSpace < 0 then
    iSpace := 4;
  if iInitPosition < 0 then
    iInitPosition := 10;

aContainer.Controls[0].Left := iInitPosition;
  aContainer.Controls[0].Top := Round((aContainer.ClientHeight -
    aContainer.Controls[0].Height) / 2);
  aContainer.Controls[i].Left := iSpace + aContainer.Controls[i - 1].Left
    + aContainer.Controls[i - 1].Width;
  aContainer.Controls[i].Top := Round((aContainer.ClientHeight -
    aContainer.Controls[i].Height) / 2);
end;

看看我这段代码,实现控件自动排序的,如何实现控件按原来的位置从左到右依次排序呢?
这个默认的排序规则是控件添加 进panel中的顺序.
高手指点指点..

关注
onlyou13
onlyou13
本版等级:

 
#11 得分:0回复于: 2012-03-15 13:35:48
可以设置tag来实现,然后findcomponent
关注
kuangning
kuangning
本版等级:

 
#12 得分:10回复于: 2012-03-23 22:08:03
如果窗体上的控件都是 TWinControl继承下来的 下面的代码对你可能有帮助
  var

P:TPoint;
wnd:Thandle;
vWinControl: TWinControl;
begin

P := self.ClientToScreen(Point(x,y));

wnd := WindowFromPoint(p);//
      if wnd<>0 then
      begin
           vWinControl := FindControl(wnd);

end;

end;

关注
kuangning
kuangning
本版等级:

 
#13 得分:0回复于: 2012-03-23 22:11:03
以上代码对TLabel,TImage无效 对TPanel,TEdit有效
对无效的TLabel,TImage等放在TPanel容器里面,上面的代码就可以用了

delphi如何按照控件的左右顺序来遍历窗体中的每个控件 [问题点数:20 http://bbs.csdn.net/topics/380216822的更多相关文章

  1. 关于WinForm引用WPF窗体---在Winform窗体中使用WPF控件

    项目中有个界面展示用WPF实现起来比较简单,并且能提供更酷炫的效果,但是在WinForm中使用WPF窗体出现了问题,在网上找了一下有些人说Winform不能引用WPF的窗体,我就很纳闷,Win32都能 ...

  2. 【机房系统知识小结点系列】之遍历窗体中的控件,判断Text是否为空?

    做机房系统时,几乎每个窗体中都会用到判断界面中的控件是否为空的情景.我们曾经是这样走来的: 第一版: 好处:对窗体界面中的Text等控件,逐一做判断,当用户输入某一项为空的时候,会议弹出框的形式,告诉 ...

  3. (转)C# WinForm中 获得当前鼠标所在控件 或 将窗体中鼠标所在控件名显示在窗体标题上

    原文地址:http://www.cnblogs.com/08shiyan/archive/2011/04/14/2015758.html /********************** * 课题:将窗 ...

  4. winfrom窗体中嵌套WPF控件

    前言 本文主要介绍如何在winfrom窗体中嵌套WPF控件, 一来是自己记录一下,而来希望能对有需要的朋友提供实现思路. 如有错误请指出...下面进入正题... -1.前期准备 准备一个建立好的win ...

  5. 在Winform窗体中使用WPF控件(附源码)

    原文:在Winform窗体中使用WPF控件(附源码) 今天是礼拜6,下雨,没有外出,闲暇就写一篇博文讲下如何在Winform中使用WPF控件.原有是我在百度上搜索相关信息无果,遂干脆动手自己实现. W ...

  6. Winform中怎样在工具类中对窗体中多个控件进行操作(赋值)

    场景 需求是在窗体加载完成后掉用工具类的方法,工具类中获取窗体的多个控件对象进行赋值. 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 ...

  7. !!无须定义配置文件中的每个变量的读写操作,以下代码遍历界面中各个c#控件,自动记录其文本,作为配置文件保存

    namespace PluginLib{    /// <summary>    /// 遍历控件所有子控件并初始化或保存其值    /// </summary>    pub ...

  8. CRM窗体中只读的控件不会引发Update事件

    在CRM的窗体设计时,如果把某一个控件设为只读了,仅管你在后台用代码修改了值,这个值也不会起任何作用,更不会提交到后台,触发Update事件!

  9. 【C#】在窗体中水平居中的控件,到了XP下不居中的解决办法

    我时不时会遭遇这个操蛋问题,今天得闲研究了一下,解决如下: A.将窗体FormBorderStyle属性改为Fixed系,当然这会导致用户不能拖拉窗口大小,所以你可能需要B计划↓ B.确保在[VS]中 ...

随机推荐

  1. 设计模式开闭原则--java

    静态工厂模式 + 反射控制入参范围 public interface IPrinter { void print(); } public class CanonPrinter implements I ...

  2. python之 yield --- “协程”

    在编程中我们经常会用到列表,以前使用列表时需要声明和初始化,在数据量比较大的时候也需要把列表完整生产出来,例如要存放1000给数据,需要准备长度1000的列表,这样计算机就需要准备内存放置这个列表,在 ...

  3. 基于Kintex Ultrasacle的万兆网络光纤 PCIe加速卡416 光纤PCIe卡

    基于Kintex Ultrasacle的万兆网络光纤 PCIe加速卡 一.产品概述 本卡为企业级别板卡,可用于数据中心,安全领域数据采集处理.标准PCI Express全高板,适用于普通服务器.工作站 ...

  4. Zabbix--04 自定义模版、web监控

    目录 一.自定义模版 1.创建模版 2.导出模版 3.监控TCP11种状态 3.2.重启zabbix-agent 3.3.测试监控项 4.导入模版文件 5.主机关联模版文件 6.查看最新数据 7.查看 ...

  5. Protobuf(一)——Protobuf简介

    Protobuf简介 ​ 什么是 Google Protocol Buffer? 假如您在网上搜索,应该会得到类似这样的文字介绍: ​ Google Protocol Buffer( 简称 Proto ...

  6. AT Regular 086

    C - Not so Diverse 略 D - Non-decreasing 先找绝对值最大的数 构造出全正(最大的数为正) 或者全负(最大的数为负) 然后前缀和(正)或者后缀和(负) 操作次数2n ...

  7. python 文件操作、shutil模块

    参考自:https://www.cnblogs.com/alex3714/articles/5717620.html 1. 文件基础操作 f = open('test.txt') #打开文件 firs ...

  8. python+selenium实现发送一封带附件的邮件

    163邮件登录首页 登录成功断言是否有退出按钮 点击退出退出登录 from selenium import webdriver import unittest import time class Vi ...

  9. postman—Sandbox和断言

    Postman沙盒 Postman Sandbox是一个JavaScript执行环境,您可以在编写预请求脚本和测试脚本(在Postman和Newman中)时可用.在这个沙箱中执行您在预请求/测试脚本部 ...

  10. 不同地区Android开发者使用哪些设备测试APP?

    我们的团队密切关注着移动世界的趋势,以便可以提供所有有关变化的最紧密和最重要的信息.春天恰好是对app进行新一轮测试并检查其与不同Android设备兼容性如何的最佳时机.下面让我们一起来看看全世界范围 ...