问题是这样的
我一个form上有一百多个edit{这个数量是必须的},要求每个EDIT,在获得焦点的时候,与之对应的label,字体加粗和变换字体颜色,我现在是在每个edit的onenter事件中编写代码。
自己感觉代码重复,量也大,有没有什么办法可以减少代码的编写呢。
还有同样的问题就是,在edit里面键入回车键的时候,焦点自动移到下一个edit ,我现在也是每个edit编写代码,100多个啊?
望那位能够指点一下,
谢谢

解决方案 »

  1.   

    让edit和对应的label的tag一样,把他们的判断和事件都写成一个循环,再循环里判断即可,焦点自动转移也是一样的,FormCreate的时候就再循环里制定每个edit的onkeypress事件函数
      

  2.   

    应该用LabeledEdit控件,在OnEnter和OnExit事件里利用Sender参数进行设置。
    第二个问题,在Form的KeyPress事件里增加:
       if Key = VK_RETURN 
       begin
           SelectNext(ActiveControl,true,true);
           Key=0;
       end
      

  3.   

    (sender as TLabeledEdit).tag = index  这样就可以用1个公用的过程 了, 无需写100多个了。
      

  4.   

    (Sender as TLabeledEdit).EditLabel.Caption := 'ABCD';
      

  5.   

    问题是我的情况不能用TLabeledEdit啊?label和edit的距离较远
      

  6.   

    还是用tag属性做文单,你把配对的TLable和TEdit的tag设成一样的,然后每次得到焦点的时候找窗体上所有的lable,判断tag是不是一样的,如果是就做相应的操作就行了
      

  7.   

    你自己对TEDIT和TLABEL做个封装就好了。 
      

  8.   

    判读的代码应该放在那个事件代码里面啊?我放在TForm1.FormClick(Sender: TObject);好像不行
      

  9.   

    一个办法是用Tag做关联,不过每次使用都要循环遍历效率太低。最可取的办法是把Label和Edit,分别增加到两个TList中,那么可以直接用TList.IndexOf进行快速索引,另外,这么多的控件干嘛不考虑动态创建?
      

  10.   

    首先感谢各位的支持,我现在已经用edit排版好了,在更换的话。工作量太大
    觉得采用循环遍历的法方,但是我把判段的代码放在
    TForm1.FormClick(Sender: TObject);
    下面到底该怎么弄啊?
      

  11.   

    上百个Edit?我真同情你的用户用StringGrid或者ValueEdit不好么?
      

  12.   

    创建也要自动循环创建才好,自动给成对的label和edit的tag赋相同的值
      

  13.   

    1.首先命名控件要有规律,否则后面就不好办;
    2.在 TEdit 的 OnEnter/OnExit 事件传 Tag 进去进行你需要更改的字体/背景颜色
      

  14.   

    100多个控件?还不如用Grid好些!
      

  15.   

    可以LIST存储Edit与Label的关系,在事件中根据Edit去索引Label就可以了
    这样只用一个函数就可以了