111,129
社区成员
发帖
与我相关
我的任务
分享
//这个是基类窗体,所有窗体都继承它而来,包括主窗体
public partial class FrmBase : Form
{
public FrmBase()
{
InitializeComponent();
}
//这个是虚函数,可以子类窗体重新实现,也可以在基类遍历所有控件修改语言
//但建议在子类实现
public virtual void LanguageChange(int languageType)
{
switch (languageType)
{
case 0:
Text = "中文";
break;
case 1:
Text = "英文";
break;
}
}
//这里使用HWND_BROADCAST广播消息的方法,通知所有窗体改变语言
//100 101 102 103都是自定义参数,可修改
protected override void WndProc(ref Message m)
{
if (m.Msg == 100 && m.WParam.ToInt32() == 101)
{
if (m.LParam.ToInt32() == 102)
LanguageChange(0);
else if(m.LParam.ToInt32() == 103)
LanguageChange(1);
}
else
base.WndProc(ref m);
}
}
//主窗体的代码:
//主窗体共有四个测试按钮
private const int HWND_BROADCAST = 0xFFFF;
[DllImport("User32.dll", EntryPoint = "SendMessage")]
private static extern int SendMessage(int hWnd, int Msg, int wParam, int lParam);
private void button1_Click(object sender, EventArgs e)
{
//广播消息,修改为中文
SendMessage(HWND_BROADCAST, 100, 101, 102);
}
private void button2_Click(object sender, EventArgs e)
{
//广播消息,修改为英文
SendMessage(HWND_BROADCAST, 100, 101, 103);
}
private void button3_Click(object sender, EventArgs e)
{
//打开继承于FrmBase的窗体
FrmBase frm = new FrmBase();
frm.Show();
}
private void button4_Click(object sender, EventArgs e)
{
//Form1也继承于FrmBase
Form1 frm = new Form1();
frm.Show();
}