首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

怎么循环winform界面的所有控件

2012-06-20 
如何循环winform界面的所有控件?如何使用一个循环,循环每一个控件,我是要做多语言版本,要循环所有的控件,

如何循环winform界面的所有控件?
如何使用一个循环,循环每一个控件,我是要做多语言版本,要循环所有的控件,逐个更改控件text。
   

C# code
                foreach (Control item in this.Controls)                {                    if (Values[item.Name] != null)                        item.Text = Values[item.Name].ToString();                }//values是读取到配置文件ini的Hashtable   key是控件name,value是控件text值

这样写,访问不到控件


另外我又这样写,还是获取不到控件。
C# code
                foreach (DictionaryEntry item in Values)                {                    if (this.Controls[item.Key.ToString()] != null)                        this.Controls[item.Key.ToString()].Text = item.Value.ToString();                }


另外请问一下 桌面应用程序做多语言版本还有其他好的方式吗?

[解决办法]
C# code
foreach (Control item in this.Controls){    try    {          TextBox t = (TextBox)item;          //是TextBox控件,做你后面的     }    catch    {          //不是TextBox控件 自己看着办     }}
[解决办法]
C# code
foreach (Control item in this.Controls)            {                if(item is TabControl)                {                    foreach (Control item_sub in item.Controls)                    {                        item_sub.Text = "tab动态修改";                        foreach (Control item_sub2 in item_sub.Controls)                            item_sub2.Text = "tab子控件动态修改";                    }                }                else                    item.Text = "动态修改";            }
[解决办法]
是差不多,我的意思是把界面所有文字全部写到xml,生成界面的时候由xml读取出来显示,这样就是支持多语言了吗?多少种语言就用多少个xml行了
探讨
ini和xml应该差不多吧。

引用:
多语言版为什么不用xml?

[解决办法]
图片看不了啊。。。


感觉用resx文件实现的多语言比较简单

项目的Properties下创建几个resx文件,对应多语言,控件的name作为key,value就是要显示的内容就可以了。

也不需要读取文件的操作,比较简单。

public void InitFormLanguse(List<Control> iControls, string lag_flg)
{
if (iControls.Count > 0)
{
foreach (Control ct in iControls)
{

if (Constant.LAG_CN.Equals(lag_flg))
{
ct.Text = Properties.CN_Resources.ResourceManager.GetString(ct.Name.ToString());
}
else if (Constant.LAG_EN.Equals(lag_flg))
{
ct.Text = Properties.EN_Resources.ResourceManager.GetString(ct.Name.ToString());
}
else
{
ct.Text = Properties.JP_Resources.ResourceManager.GetString(ct.Name.ToString());
}
}
}
}


热点排行