如何循环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行了
[解决办法]
图片看不了啊。。。
感觉用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());
}
}
}
}