日期:2014-05-18  浏览次数:20921 次

貌似超级麻烦的控件位置、大小问题
程序:WinForm程序,可以动态多语言切换,可动态切换字体

问题如下:
当切换语言时,Label控件中的文本会从中文变成英文(如:要打印的数量 -> The count you want to print),这样一来,Label控件长度就变长了,就会把紧跟在其后的TextBox控件给遮住,有什么好的解决办法没啊?

切换字体就更麻烦了,如果把字号从10号变成14好,因为Label控件不会自适应高度,所以只能看见字的上半部分,而且因为字变大了,还有可能遮住后面的TextBox

救命啊!

------解决方案--------------------
还有 个人认为不需要这样做 要打印的数量 -> The count you want to print

而应该使用tooltip来实现完整提示 text还是应该简洁的好 

打印 -> Print
------解决方案--------------------
1,设置Form的 Language 属性为想要的语言,如"English (United States)";
2,编辑Form上的控件显示文本,并可以调整大小与位置,如把Label的文本改成英文后,它的长度变长遮盖了TextBox,那么手动把TextBox右移,以全部显示;
3,保存(在第二步操作时,就可以看到在Form1.cs下有新的resx文件生成,这时保存的就是新的文件,如Form1.en-US.resx);
4,F5(Start Debugging), 看到么,窗体内容还是修改前的,当然,因为系统区域设置没变,关闭WinForm吧;
5,修改系统区域设置,比如,改成English (United States);
6,再运行WinForm,运行刚生成的exe文件即可,这里,看到效果了,文本变成英语,TextBox位置右移避开了过长的Label.

Remark:
.NET提供的Localization解决方案,不仅可以对文字起作用,还能调整程序界面布局.

Notice:
要看到区域设置对程序语言的影响,请在函数Main()中(或其他适当位置)加上如下代码:
C# code
System.Globalization.CultureInfo ci = System.Globalization.CultureInfo.CurrentCulture;
System.Threading.Thread.CurrentThread.CurrentCulture = ci;
System.Threading.Thread.CurrentThread.CurrentUICulture = ci;

------解决方案--------------------
以上答非所问.
不过重新设置界面布局肯定是对了,只不过是手动或自动的问题.
如果只要影响当前程序的话,没必要改成系统区域设置了.在程序中接受用户切换语言里,改变程序本身的CultureInfo,即可达到上述目的.