控件名定义死了,如何循环来改变一些值?

Crawl.W 2015-09-25 03:17:00
如标签 lbl1,lbl2,lbl3,lbl4,…如果在for循环中统一地改变所有Label的Caption?
不要去枚举控件,应该有些Label比如lbl5我又不需要改变。
想要的效果是就后面的数字能不能有办法做到数组下标的效果。
求大神。(http://bbs.csdn.net/topics/391819876, 这个麻烦回复一下,想结贴)
...全文
164 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
worldy 2015-09-29
  • 打赏
  • 举报
回复
将label的hwnd或者ID值放入到一个数组中,循环
www_adintr_com 2015-09-29
  • 打赏
  • 举报
回复
引用 10 楼 qq_27564553 的回复:
[quote=引用 9 楼 adlay 的回复:] C++ Builder 没用过,不过按理说控件 ID 这个是 Windows API 里面使用的东西,不管什么编译器封装的什么库,最后还是要调用 API 来完成。 实在不行你就在数组里面放 TLabel* 吧
意思是这样放?
TLabel* lbls[] = {lbl1, lbl2, lbl3, lbl4, lbl5, lbl5, lbl6, lbl7, lbl8, lbl9,
    lbl10, lbl11, lbl12};
[/quote] 是的
Crawl.W 2015-09-29
  • 打赏
  • 举报
回复
感觉相当的怪异
Crawl.W 2015-09-29
  • 打赏
  • 举报
回复
引用 9 楼 adlay 的回复:
C++ Builder 没用过,不过按理说控件 ID 这个是 Windows API 里面使用的东西,不管什么编译器封装的什么库,最后还是要调用 API 来完成。 实在不行你就在数组里面放 TLabel* 吧
意思是这样放?
TLabel* lbls[] = {lbl1, lbl2, lbl3, lbl4, lbl5, lbl5, lbl6, lbl7, lbl8, lbl9,
    lbl10, lbl11, lbl12};
www_adintr_com 2015-09-28
  • 打赏
  • 举报
回复
引用 4 楼 qq_27564553 的回复:
[quote=引用 1 楼 adlay 的回复:] 你可以查看 Resource.h 文件里面这几个宏定义的值是否是连续的,如果是那么 lbl1 + 1 自然就是 lbl2 了. 如果不是,可以: 1. 把他们改成连续的,注意别和其它控件冲突,发生冲突的其他控件也得修改。 2. 自己定义个数组 UINT lbls[] = { lbl1, lbl2, lbl3 .... } 然后用 for 来遍历 lbls 数组就行了。
两种方法都不行,首先label类型不能转变成unit,再就是uint不能去调用label的属性。[/quote] 那你的 label 是什么类型? 控件 ID 就是 UINT 类型的,有了这个 ID,你用 GetDlgItem 就可以获得对应的 CWnd* 类型,如果你是 CStatic 之类的,调用它的 Attach 方法就可以把 CStatic 和 CWnd 的 m_hWnd 绑定。操作完 Detach 即可
Crawl.W 2015-09-28
  • 打赏
  • 举报
回复
引用 2 楼 zhao4zhong1 的回复:
活人总之不会被尿憋死的。
那老师有什么解决办法吗,不要老师水贴好嘛?看您老是水贴,我都不敢邀请你回答问题
Crawl.W 2015-09-28
  • 打赏
  • 举报
回复
引用 1 楼 adlay 的回复:
你可以查看 Resource.h 文件里面这几个宏定义的值是否是连续的,如果是那么 lbl1 + 1 自然就是 lbl2 了. 如果不是,可以: 1. 把他们改成连续的,注意别和其它控件冲突,发生冲突的其他控件也得修改。 2. 自己定义个数组 UINT lbls[] = { lbl1, lbl2, lbl3 .... } 然后用 for 来遍历 lbls 数组就行了。
两种方法都不行,首先label类型不能转变成unit,再就是uint不能去调用label的属性。
Crawl.W 2015-09-28
  • 打赏
  • 举报
回复
引用 1 楼 adlay 的回复:
你可以查看 Resource.h 文件里面这几个宏定义的值是否是连续的,如果是那么 lbl1 + 1 自然就是 lbl2 了. 如果不是,可以: 1. 把他们改成连续的,注意别和其它控件冲突,发生冲突的其他控件也得修改。 2. 自己定义个数组 UINT lbls[] = { lbl1, lbl2, lbl3 .... } 然后用 for 来遍历 lbls 数组就行了。
阅读起来会不会很不方便。
www_adintr_com 2015-09-28
  • 打赏
  • 举报
回复
C++ Builder 没用过,不过按理说控件 ID 这个是 Windows API 里面使用的东西,不管什么编译器封装的什么库,最后还是要调用 API 来完成。 实在不行你就在数组里面放 TLabel* 吧
Crawl.W 2015-09-28
  • 打赏
  • 举报
回复
C++builder没有id的控件
Crawl.W 2015-09-28
  • 打赏
  • 举报
回复
引用 6 楼 adlay 的回复:
[quote=引用 4 楼 qq_27564553 的回复:] [quote=引用 1 楼 adlay 的回复:] 你可以查看 Resource.h 文件里面这几个宏定义的值是否是连续的,如果是那么 lbl1 + 1 自然就是 lbl2 了. 如果不是,可以: 1. 把他们改成连续的,注意别和其它控件冲突,发生冲突的其他控件也得修改。 2. 自己定义个数组 UINT lbls[] = { lbl1, lbl2, lbl3 .... } 然后用 for 来遍历 lbls 数组就行了。
两种方法都不行,首先label类型不能转变成unit,再就是uint不能去调用label的属性。[/quote] 那你的 label 是什么类型? 控件 ID 就是 UINT 类型的,有了这个 ID,你用 GetDlgItem 就可以获得对应的 CWnd* 类型,如果你是 CStatic 之类的,调用它的 Attach 方法就可以把 CStatic 和 CWnd 的 m_hWnd 绑定。操作完 Detach 即可[/quote] mfc里是没有label类型的吧,有的就是你所说的静态文本框,像你说的用数组包含起来是个不错的尝试,但是lbl1在C++builder里是一个TLabel类型的指针,这一步就不能过去。
赵4老师 2015-09-25
  • 打赏
  • 举报
回复
活人总之不会被尿憋死的。
www_adintr_com 2015-09-25
  • 打赏
  • 举报
回复
你可以查看 Resource.h 文件里面这几个宏定义的值是否是连续的,如果是那么 lbl1 + 1 自然就是 lbl2 了. 如果不是,可以: 1. 把他们改成连续的,注意别和其它控件冲突,发生冲突的其他控件也得修改。 2. 自己定义个数组 UINT lbls[] = { lbl1, lbl2, lbl3 .... } 然后用 for 来遍历 lbls 数组就行了。

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧