diff --git a/src/PBAnaly/Assist/GlobalData.cs b/src/PBAnaly/Assist/GlobalData.cs new file mode 100644 index 0000000..fd0c1d6 --- /dev/null +++ b/src/PBAnaly/Assist/GlobalData.cs @@ -0,0 +1,169 @@ +using AntdUI; +using PBAnaly.LoginCommon; +using System; +using System.Collections.Generic; +using System.Data; +using System.Data.SQLite; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace PBAnaly.Assist +{ + public static class GlobalData + { + + public static string dbPath = "UserManage.db"; + public static string connectionString = $"Data Source={dbPath};Version=3;"; + + + #region Propertys 全局属性,属性名、属性值 + /// + /// 全局属性,属性名、属性值 + /// + private static Dictionary Propertys; + #endregion + /// + /// 全局属性更改事件 + /// + public static event PropertyChangedHandle PropertyChanged; + /// + /// 带两个参数无返回值的委托 + /// + /// 属性名 + /// 属性值 + public delegate void PropertyChangedHandle(string name, string value); + + #region SetProperty 设置全局属性 + /// + /// 设置全局属性 + /// + /// 属性名 + /// 属性值 + public static void SetProperty(string name, string value) + { + //判断当前key是否在集合内 + if (GlobalData.Propertys.ContainsKey(name)) + { + //当前key在集合内 + //判断要设置的属性是否相同 + if (GlobalData.Propertys[name] != value) + { + //设置属性 + GlobalData.Propertys[name] = value; + + //根据属性名更新数据库 + UpdateGlobalPropertyByName(name, value); + + //触发属性更改事件 + PropertyChanged?.Invoke(name, value); + } + } + else + { + try + { + using (var connection = new SQLiteConnection(connectionString)) + { + connection.Open(); + + string insertSQL = @" + INSERT OR IGNORE INTO global_property (property_name, property_value) + VALUES (@property_name, @property_value);"; + + using (var command = new SQLiteCommand(insertSQL, connection)) + { + // 参数化查询,防止SQL注入 + command.Parameters.AddWithValue("@property_name", name); + command.Parameters.AddWithValue("@property_value", value); + command.ExecuteNonQuery(); + } + + connection.Close(); + } + + //更新集合中当前key对应的值 + GlobalData.Propertys[name] = value; + + PropertyChanged?.Invoke(name, value); + } + catch (Exception ex) + { + } + } + } + #endregion + + #region GetProperty 根据属性名获取属性值 + /// + /// 根据属性名获取属性值 + /// + /// 属性名 + /// 属性值 + public static string GetProperty(string name) + { + string value = ""; + if (GlobalData.Propertys.ContainsKey(name)) + { + value = GlobalData.Propertys[name]; + } + return value; + } + #endregion + + #region LoadGlobalPropertyFromDb 加载全局变量 + /// + /// 加载全局变量LoadGlobalPropertyFromDb + /// + public static void LoadGlobalPropertyFromDb() + { + Propertys = new Dictionary(); + using (var connection = new SQLiteConnection(connectionString)) + { + connection.Open(); + + string query = "select *from global_property"; + using (var command = new SQLiteCommand(query, connection)) + { + using (var reader = command.ExecuteReader()) + { + while (reader.Read()) + { + string key = reader["property_name"].ToString(); + string value = reader["property_value"].ToString(); + GlobalData.Propertys.Add(key, value); + } + } + } + + connection.Close(); + } + } + #endregion + + #region UpdateGlobalPropertyByName 根据属性名更新属性表 + /// + /// 根据属性名更新属性表 + /// + /// 属性名 + /// 属性值 + private static void UpdateGlobalPropertyByName(string name, object value) + { + string sql = string.Format("update global_property set property_value='{0}' where property_name='{1}'", value, name); + using (SQLiteConnection conn = new SQLiteConnection(connectionString)) + { + conn.Open(); + + using (SQLiteCommand cmd = new SQLiteCommand(sql, conn)) + { + var blnResult = (cmd.ExecuteNonQuery() > 0); + } + conn.Close(); + } + + } + #endregion + + } +} diff --git a/src/PBAnaly/LoginCommon/BackPassWordForm.cs b/src/PBAnaly/LoginCommon/BackPassWordForm.cs index 678a53a..f44dc8a 100644 --- a/src/PBAnaly/LoginCommon/BackPassWordForm.cs +++ b/src/PBAnaly/LoginCommon/BackPassWordForm.cs @@ -1,11 +1,15 @@ using AntdUI; +using PBAnaly.Assist; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; +using System.Globalization; using System.Linq; +using System.Resources; using System.Text; +using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; @@ -21,6 +25,15 @@ namespace PBAnaly.LoginCommon this.StartPosition = FormStartPosition.CenterScreen; this.Location = new System.Drawing.Point((Screen.PrimaryScreen.WorkingArea.Width - this.Width) / 2, (Screen.PrimaryScreen.WorkingArea.Height - this.Height) / 2); + + if (GlobalData.GetProperty("Language") == "Chinese") + { + SetLanguage("zh-CN"); + } + else + { + SetLanguage("en-US"); + } } #region =====重写WndPoc方法 无边框窗体更改大小及拖动========= @@ -102,7 +115,49 @@ namespace PBAnaly.LoginCommon } #endregion - private void txt_UserName_TextChanged(object sender, EventArgs e) + #region 中英文切换模块 + ResourceManager resourceManager; + private void SetLanguage(string cultureCode) + { + resourceManager = new ResourceManager("PBAnaly.Properties.Resources", typeof(MainForm).Assembly); + + // 设置当前线程的文化信息 + Thread.CurrentThread.CurrentUICulture = new CultureInfo(cultureCode); + + // 更新所有控件的文本 + UpdateControlsText(); + } + + // 更新所有控件的文本 + private void UpdateControlsText() + { + //// 遍历所有控件并更新文本 + foreach (Control control in this.Controls) + { + UpdateControlText(control); + } + } + // 更新单个控件的文本 + private void UpdateControlText(Control control) + { + //// 直接通过控件的 Name 属性获取资源字符串 + string resourceText = resourceManager.GetString(control.Name); + if (!string.IsNullOrEmpty(resourceText)) + { + control.Text = resourceText; + } + + // 如果控件包含子控件,则递归更新子控件 + foreach (Control subControl in control.Controls) + { + UpdateControlText(subControl); + } + } + #endregion + + + +private void txt_UserName_TextChanged(object sender, EventArgs e) { try { diff --git a/src/PBAnaly/LoginCommon/BackPassWordForm.en-US.resx b/src/PBAnaly/LoginCommon/BackPassWordForm.en-US.resx new file mode 100644 index 0000000..20f6acc --- /dev/null +++ b/src/PBAnaly/LoginCommon/BackPassWordForm.en-US.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + back + + diff --git a/src/PBAnaly/LoginCommon/BackPassWordForm.zh-CN.resx b/src/PBAnaly/LoginCommon/BackPassWordForm.zh-CN.resx new file mode 100644 index 0000000..66c0f7a --- /dev/null +++ b/src/PBAnaly/LoginCommon/BackPassWordForm.zh-CN.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 返回 + + diff --git a/src/PBAnaly/LoginCommon/LoginForm.cs b/src/PBAnaly/LoginCommon/LoginForm.cs index 38637cd..85b7514 100644 --- a/src/PBAnaly/LoginCommon/LoginForm.cs +++ b/src/PBAnaly/LoginCommon/LoginForm.cs @@ -7,8 +7,11 @@ using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; +using System.Globalization; using System.Linq; +using System.Resources; using System.Text; +using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; @@ -27,7 +30,16 @@ namespace PBAnaly.LoginCommon this.StartPosition = FormStartPosition.CenterScreen; this.Location = new System.Drawing.Point((Screen.PrimaryScreen.WorkingArea.Width - this.Width) / 2, (Screen.PrimaryScreen.WorkingArea.Height - this.Height) / 2); - + + if (GlobalData.GetProperty("Language") == "Chinese") + { + SetLanguage("zh-CN"); + } + else + { + SetLanguage("en-US"); + } + //如果上一次登录的时候是勾选了记住本次登录,那么就像用户名和密码填充到本文控件 if (UserManage.LastLoginUser.Count > 0) @@ -44,9 +56,48 @@ namespace PBAnaly.LoginCommon } } + #region 中英文切换模块 + ResourceManager resourceManager; + private void SetLanguage(string cultureCode) + { + resourceManager = new ResourceManager("PBAnaly.Properties.Resources", typeof(MainForm).Assembly); + + // 设置当前线程的文化信息 + Thread.CurrentThread.CurrentUICulture = new CultureInfo(cultureCode); + + // 更新所有控件的文本 + UpdateControlsText(); + } + + // 更新所有控件的文本 + private void UpdateControlsText() + { + //// 遍历所有控件并更新文本 + foreach (Control control in this.Controls) + { + UpdateControlText(control); + } + } + // 更新单个控件的文本 + private void UpdateControlText(Control control) + { + //// 直接通过控件的 Name 属性获取资源字符串 + string resourceText = resourceManager.GetString(control.Name); + if (!string.IsNullOrEmpty(resourceText)) + { + control.Text = resourceText; + } + + // 如果控件包含子控件,则递归更新子控件 + foreach (Control subControl in control.Controls) + { + UpdateControlText(subControl); + } + } + #endregion #region =====重写WndPoc方法 无边框窗体更改大小及拖动========= - const int HTLEFT = 10; +const int HTLEFT = 10; const int HTRIGHT = 11; const int HTTOP = 12; const int HTTOPLEFT = 13; diff --git a/src/PBAnaly/LoginCommon/RegisterFrom.Designer.cs b/src/PBAnaly/LoginCommon/RegisterFrom.Designer.cs index 5be9a4f..f195692 100644 --- a/src/PBAnaly/LoginCommon/RegisterFrom.Designer.cs +++ b/src/PBAnaly/LoginCommon/RegisterFrom.Designer.cs @@ -29,19 +29,19 @@ private void InitializeComponent() { this.panel1 = new System.Windows.Forms.Panel(); + this.label_re_Answer = new System.Windows.Forms.Label(); + this.label_re_question = new System.Windows.Forms.Label(); + this.label_enterPassword = new System.Windows.Forms.Label(); + this.label_re_password = new System.Windows.Forms.Label(); + this.label_re_userNma = new System.Windows.Forms.Label(); + this.txt_answer = new System.Windows.Forms.TextBox(); + this.txt_broblem = new System.Windows.Forms.TextBox(); + this.txt_enter_password = new System.Windows.Forms.TextBox(); this.txt_Password = new System.Windows.Forms.TextBox(); this.txt_UserName = new System.Windows.Forms.TextBox(); - this.btn_register = new MaterialSkin.Controls.MaterialButton(); - this.btn_back = new MaterialSkin.Controls.MaterialButton(); + this.btn_re_register = new MaterialSkin.Controls.MaterialButton(); + this.btn_back_form_re = new MaterialSkin.Controls.MaterialButton(); this.label4 = new System.Windows.Forms.Label(); - this.txt_enter_password = new System.Windows.Forms.TextBox(); - this.txt_broblem = new System.Windows.Forms.TextBox(); - this.txt_answer = new System.Windows.Forms.TextBox(); - this.label1 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.label3 = new System.Windows.Forms.Label(); - this.label5 = new System.Windows.Forms.Label(); - this.label6 = new System.Windows.Forms.Label(); this.panel1.SuspendLayout(); this.SuspendLayout(); // @@ -51,23 +51,112 @@ | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.panel1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50))))); - this.panel1.Controls.Add(this.label6); - this.panel1.Controls.Add(this.label5); - this.panel1.Controls.Add(this.label3); - this.panel1.Controls.Add(this.label2); - this.panel1.Controls.Add(this.label1); + this.panel1.Controls.Add(this.label_re_Answer); + this.panel1.Controls.Add(this.label_re_question); + this.panel1.Controls.Add(this.label_enterPassword); + this.panel1.Controls.Add(this.label_re_password); + this.panel1.Controls.Add(this.label_re_userNma); this.panel1.Controls.Add(this.txt_answer); this.panel1.Controls.Add(this.txt_broblem); this.panel1.Controls.Add(this.txt_enter_password); this.panel1.Controls.Add(this.txt_Password); this.panel1.Controls.Add(this.txt_UserName); - this.panel1.Controls.Add(this.btn_register); - this.panel1.Controls.Add(this.btn_back); + this.panel1.Controls.Add(this.btn_re_register); + this.panel1.Controls.Add(this.btn_back_form_re); this.panel1.Location = new System.Drawing.Point(-1, 33); this.panel1.Name = "panel1"; this.panel1.Size = new System.Drawing.Size(638, 537); this.panel1.TabIndex = 452; // + // label_re_Answer + // + this.label_re_Answer.AutoSize = true; + this.label_re_Answer.Font = new System.Drawing.Font("微软雅黑", 13F, System.Drawing.FontStyle.Bold); + this.label_re_Answer.ForeColor = System.Drawing.Color.White; + this.label_re_Answer.Location = new System.Drawing.Point(90, 361); + this.label_re_Answer.Name = "label_re_Answer"; + this.label_re_Answer.Size = new System.Drawing.Size(80, 25); + this.label_re_Answer.TabIndex = 459; + this.label_re_Answer.Text = "Answer"; + // + // label_re_question + // + this.label_re_question.AutoSize = true; + this.label_re_question.Font = new System.Drawing.Font("微软雅黑", 13F, System.Drawing.FontStyle.Bold); + this.label_re_question.ForeColor = System.Drawing.Color.White; + this.label_re_question.Location = new System.Drawing.Point(90, 282); + this.label_re_question.Name = "label_re_question"; + this.label_re_question.Size = new System.Drawing.Size(94, 25); + this.label_re_question.TabIndex = 458; + this.label_re_question.Text = "Question"; + // + // label_enterPassword + // + this.label_enterPassword.AutoSize = true; + this.label_enterPassword.Font = new System.Drawing.Font("微软雅黑", 13F, System.Drawing.FontStyle.Bold); + this.label_enterPassword.ForeColor = System.Drawing.Color.White; + this.label_enterPassword.Location = new System.Drawing.Point(90, 209); + this.label_enterPassword.Name = "label_enterPassword"; + this.label_enterPassword.Size = new System.Drawing.Size(99, 25); + this.label_enterPassword.TabIndex = 457; + this.label_enterPassword.Text = "Password"; + // + // label_re_password + // + this.label_re_password.AutoSize = true; + this.label_re_password.Font = new System.Drawing.Font("微软雅黑", 13F, System.Drawing.FontStyle.Bold); + this.label_re_password.ForeColor = System.Drawing.Color.White; + this.label_re_password.Location = new System.Drawing.Point(90, 138); + this.label_re_password.Name = "label_re_password"; + this.label_re_password.Size = new System.Drawing.Size(99, 25); + this.label_re_password.TabIndex = 456; + this.label_re_password.Text = "Password"; + // + // label_re_userNma + // + this.label_re_userNma.AutoSize = true; + this.label_re_userNma.Font = new System.Drawing.Font("微软雅黑", 13F, System.Drawing.FontStyle.Bold); + this.label_re_userNma.ForeColor = System.Drawing.Color.White; + this.label_re_userNma.Location = new System.Drawing.Point(90, 72); + this.label_re_userNma.Name = "label_re_userNma"; + this.label_re_userNma.Size = new System.Drawing.Size(65, 25); + this.label_re_userNma.TabIndex = 455; + this.label_re_userNma.Text = "Name"; + // + // txt_answer + // + this.txt_answer.Font = new System.Drawing.Font("宋体", 18F); + this.txt_answer.Location = new System.Drawing.Point(195, 355); + this.txt_answer.Multiline = true; + this.txt_answer.Name = "txt_answer"; + this.txt_answer.Size = new System.Drawing.Size(389, 33); + this.txt_answer.TabIndex = 21; + this.txt_answer.Text = "Security answer"; + this.txt_answer.Click += new System.EventHandler(this.txt_answer_Click); + // + // txt_broblem + // + this.txt_broblem.Font = new System.Drawing.Font("宋体", 18F); + this.txt_broblem.Location = new System.Drawing.Point(195, 276); + this.txt_broblem.Multiline = true; + this.txt_broblem.Name = "txt_broblem"; + this.txt_broblem.Size = new System.Drawing.Size(389, 33); + this.txt_broblem.TabIndex = 20; + this.txt_broblem.Text = "Security problem"; + this.txt_broblem.Click += new System.EventHandler(this.txt_broblem_Click); + // + // txt_enter_password + // + this.txt_enter_password.Font = new System.Drawing.Font("宋体", 18F); + this.txt_enter_password.Location = new System.Drawing.Point(195, 203); + this.txt_enter_password.Multiline = true; + this.txt_enter_password.Name = "txt_enter_password"; + this.txt_enter_password.PasswordChar = '*'; + this.txt_enter_password.Size = new System.Drawing.Size(389, 33); + this.txt_enter_password.TabIndex = 19; + this.txt_enter_password.Text = "User Name"; + this.txt_enter_password.Click += new System.EventHandler(this.txt_enter_password_Click); + // // txt_Password // this.txt_Password.Font = new System.Drawing.Font("宋体", 18F); @@ -91,47 +180,47 @@ this.txt_UserName.Text = "User Name"; this.txt_UserName.Click += new System.EventHandler(this.txt_UserName_Click); // - // btn_register + // btn_re_register // - this.btn_register.AutoSize = false; - this.btn_register.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.btn_register.Density = MaterialSkin.Controls.MaterialButton.MaterialButtonDensity.Default; - this.btn_register.Depth = 0; - this.btn_register.HighEmphasis = true; - this.btn_register.Icon = null; - this.btn_register.Location = new System.Drawing.Point(394, 431); - this.btn_register.Margin = new System.Windows.Forms.Padding(4, 6, 4, 6); - this.btn_register.MouseState = MaterialSkin.MouseState.HOVER; - this.btn_register.Name = "btn_register"; - this.btn_register.NoAccentTextColor = System.Drawing.Color.Empty; - this.btn_register.Size = new System.Drawing.Size(147, 36); - this.btn_register.TabIndex = 15; - this.btn_register.Text = "register"; - this.btn_register.Type = MaterialSkin.Controls.MaterialButton.MaterialButtonType.Contained; - this.btn_register.UseAccentColor = false; - this.btn_register.UseVisualStyleBackColor = true; - this.btn_register.Click += new System.EventHandler(this.btn_register_Click); + this.btn_re_register.AutoSize = false; + this.btn_re_register.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.btn_re_register.Density = MaterialSkin.Controls.MaterialButton.MaterialButtonDensity.Default; + this.btn_re_register.Depth = 0; + this.btn_re_register.HighEmphasis = true; + this.btn_re_register.Icon = null; + this.btn_re_register.Location = new System.Drawing.Point(394, 431); + this.btn_re_register.Margin = new System.Windows.Forms.Padding(4, 6, 4, 6); + this.btn_re_register.MouseState = MaterialSkin.MouseState.HOVER; + this.btn_re_register.Name = "btn_re_register"; + this.btn_re_register.NoAccentTextColor = System.Drawing.Color.Empty; + this.btn_re_register.Size = new System.Drawing.Size(147, 36); + this.btn_re_register.TabIndex = 15; + this.btn_re_register.Text = "register"; + this.btn_re_register.Type = MaterialSkin.Controls.MaterialButton.MaterialButtonType.Contained; + this.btn_re_register.UseAccentColor = false; + this.btn_re_register.UseVisualStyleBackColor = true; + this.btn_re_register.Click += new System.EventHandler(this.btn_register_Click); // - // btn_back + // btn_back_form_re // - this.btn_back.AutoSize = false; - this.btn_back.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.btn_back.Density = MaterialSkin.Controls.MaterialButton.MaterialButtonDensity.Default; - this.btn_back.Depth = 0; - this.btn_back.HighEmphasis = true; - this.btn_back.Icon = null; - this.btn_back.Location = new System.Drawing.Point(14, 9); - this.btn_back.Margin = new System.Windows.Forms.Padding(4, 6, 4, 6); - this.btn_back.MouseState = MaterialSkin.MouseState.HOVER; - this.btn_back.Name = "btn_back"; - this.btn_back.NoAccentTextColor = System.Drawing.Color.Empty; - this.btn_back.Size = new System.Drawing.Size(62, 30); - this.btn_back.TabIndex = 14; - this.btn_back.Text = "back"; - this.btn_back.Type = MaterialSkin.Controls.MaterialButton.MaterialButtonType.Contained; - this.btn_back.UseAccentColor = false; - this.btn_back.UseVisualStyleBackColor = true; - this.btn_back.Click += new System.EventHandler(this.btn_back_Click); + this.btn_back_form_re.AutoSize = false; + this.btn_back_form_re.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.btn_back_form_re.Density = MaterialSkin.Controls.MaterialButton.MaterialButtonDensity.Default; + this.btn_back_form_re.Depth = 0; + this.btn_back_form_re.HighEmphasis = true; + this.btn_back_form_re.Icon = null; + this.btn_back_form_re.Location = new System.Drawing.Point(14, 9); + this.btn_back_form_re.Margin = new System.Windows.Forms.Padding(4, 6, 4, 6); + this.btn_back_form_re.MouseState = MaterialSkin.MouseState.HOVER; + this.btn_back_form_re.Name = "btn_back_form_re"; + this.btn_back_form_re.NoAccentTextColor = System.Drawing.Color.Empty; + this.btn_back_form_re.Size = new System.Drawing.Size(62, 30); + this.btn_back_form_re.TabIndex = 14; + this.btn_back_form_re.Text = "back"; + this.btn_back_form_re.Type = MaterialSkin.Controls.MaterialButton.MaterialButtonType.Contained; + this.btn_back_form_re.UseAccentColor = false; + this.btn_back_form_re.UseVisualStyleBackColor = true; + this.btn_back_form_re.Click += new System.EventHandler(this.btn_back_Click); // // label4 // @@ -144,95 +233,6 @@ this.label4.TabIndex = 454; this.label4.Text = "register"; // - // txt_enter_password - // - this.txt_enter_password.Font = new System.Drawing.Font("宋体", 18F); - this.txt_enter_password.Location = new System.Drawing.Point(195, 203); - this.txt_enter_password.Multiline = true; - this.txt_enter_password.Name = "txt_enter_password"; - this.txt_enter_password.PasswordChar = '*'; - this.txt_enter_password.Size = new System.Drawing.Size(389, 33); - this.txt_enter_password.TabIndex = 19; - this.txt_enter_password.Text = "User Name"; - this.txt_enter_password.Click += new System.EventHandler(this.txt_enter_password_Click); - // - // txt_broblem - // - this.txt_broblem.Font = new System.Drawing.Font("宋体", 18F); - this.txt_broblem.Location = new System.Drawing.Point(195, 276); - this.txt_broblem.Multiline = true; - this.txt_broblem.Name = "txt_broblem"; - this.txt_broblem.Size = new System.Drawing.Size(389, 33); - this.txt_broblem.TabIndex = 20; - this.txt_broblem.Text = "Security problem"; - this.txt_broblem.Click += new System.EventHandler(this.txt_broblem_Click); - // - // txt_answer - // - this.txt_answer.Font = new System.Drawing.Font("宋体", 18F); - this.txt_answer.Location = new System.Drawing.Point(195, 355); - this.txt_answer.Multiline = true; - this.txt_answer.Name = "txt_answer"; - this.txt_answer.Size = new System.Drawing.Size(389, 33); - this.txt_answer.TabIndex = 21; - this.txt_answer.Text = "Security answer"; - this.txt_answer.Click += new System.EventHandler(this.txt_answer_Click); - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Font = new System.Drawing.Font("微软雅黑", 13F, System.Drawing.FontStyle.Bold); - this.label1.ForeColor = System.Drawing.Color.White; - this.label1.Location = new System.Drawing.Point(78, 72); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(111, 25); - this.label1.TabIndex = 455; - this.label1.Text = "User Name"; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Font = new System.Drawing.Font("微软雅黑", 13F, System.Drawing.FontStyle.Bold); - this.label2.ForeColor = System.Drawing.Color.White; - this.label2.Location = new System.Drawing.Point(90, 138); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(99, 25); - this.label2.TabIndex = 456; - this.label2.Text = "Password"; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Font = new System.Drawing.Font("微软雅黑", 13F, System.Drawing.FontStyle.Bold); - this.label3.ForeColor = System.Drawing.Color.White; - this.label3.Location = new System.Drawing.Point(11, 209); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(178, 25); - this.label3.TabIndex = 457; - this.label3.Text = "Confirm Password"; - // - // label5 - // - this.label5.AutoSize = true; - this.label5.Font = new System.Drawing.Font("微软雅黑", 13F, System.Drawing.FontStyle.Bold); - this.label5.ForeColor = System.Drawing.Color.White; - this.label5.Location = new System.Drawing.Point(23, 282); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(166, 25); - this.label5.TabIndex = 458; - this.label5.Text = "security question"; - // - // label6 - // - this.label6.AutoSize = true; - this.label6.Font = new System.Drawing.Font("微软雅黑", 13F, System.Drawing.FontStyle.Bold); - this.label6.ForeColor = System.Drawing.Color.White; - this.label6.Location = new System.Drawing.Point(109, 361); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(80, 25); - this.label6.TabIndex = 459; - this.label6.Text = "Answer"; - // // RegisterFrom // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); @@ -259,13 +259,13 @@ private System.Windows.Forms.TextBox txt_enter_password; private System.Windows.Forms.TextBox txt_Password; private System.Windows.Forms.TextBox txt_UserName; - private MaterialSkin.Controls.MaterialButton btn_register; - private MaterialSkin.Controls.MaterialButton btn_back; + private MaterialSkin.Controls.MaterialButton btn_re_register; + private MaterialSkin.Controls.MaterialButton btn_back_form_re; private System.Windows.Forms.Label label4; - private System.Windows.Forms.Label label6; - private System.Windows.Forms.Label label5; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label_re_Answer; + private System.Windows.Forms.Label label_re_question; + private System.Windows.Forms.Label label_enterPassword; + private System.Windows.Forms.Label label_re_password; + private System.Windows.Forms.Label label_re_userNma; } } \ No newline at end of file diff --git a/src/PBAnaly/LoginCommon/RegisterFrom.cs b/src/PBAnaly/LoginCommon/RegisterFrom.cs index 68c1fbe..4a46346 100644 --- a/src/PBAnaly/LoginCommon/RegisterFrom.cs +++ b/src/PBAnaly/LoginCommon/RegisterFrom.cs @@ -1,10 +1,14 @@ -using System; +using PBAnaly.Assist; +using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; +using System.Globalization; using System.Linq; +using System.Resources; using System.Text; +using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; @@ -22,8 +26,56 @@ namespace PBAnaly.LoginCommon this.Location = new System.Drawing.Point((Screen.PrimaryScreen.WorkingArea.Width - this.Width) / 2, (Screen.PrimaryScreen.WorkingArea.Height - this.Height) / 2); + if (GlobalData.GetProperty("Language") == "Chinese") + { + SetLanguage("zh-CN"); + } + else + { + SetLanguage("en-US"); + } } + #region 中英文切换模块 + ResourceManager resourceManager; + private void SetLanguage(string cultureCode) + { + resourceManager = new ResourceManager("PBAnaly.Properties.Resources", typeof(MainForm).Assembly); + + // 设置当前线程的文化信息 + Thread.CurrentThread.CurrentUICulture = new CultureInfo(cultureCode); + + // 更新所有控件的文本 + UpdateControlsText(); + } + + // 更新所有控件的文本 + private void UpdateControlsText() + { + //// 遍历所有控件并更新文本 + foreach (Control control in this.Controls) + { + UpdateControlText(control); + } + } + // 更新单个控件的文本 + private void UpdateControlText(Control control) + { + //// 直接通过控件的 Name 属性获取资源字符串 + string resourceText = resourceManager.GetString(control.Name); + if (!string.IsNullOrEmpty(resourceText)) + { + control.Text = resourceText; + } + + // 如果控件包含子控件,则递归更新子控件 + foreach (Control subControl in control.Controls) + { + UpdateControlText(subControl); + } + } + #endregion + #region =====重写WndPoc方法 无边框窗体更改大小及拖动========= const int HTLEFT = 10; const int HTRIGHT = 11; diff --git a/src/PBAnaly/LoginCommon/RoleManageForm.Designer.cs b/src/PBAnaly/LoginCommon/RoleManageForm.Designer.cs index 07f0e3b..fd978b6 100644 --- a/src/PBAnaly/LoginCommon/RoleManageForm.Designer.cs +++ b/src/PBAnaly/LoginCommon/RoleManageForm.Designer.cs @@ -33,9 +33,9 @@ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle(); this.panel1 = new System.Windows.Forms.Panel(); - this.btn_Close = new System.Windows.Forms.Button(); + this.btn_role_save = new System.Windows.Forms.Button(); this.dataGridView1 = new System.Windows.Forms.DataGridView(); - this.btn_save = new System.Windows.Forms.Button(); + this.btn_Close = new System.Windows.Forms.Button(); this.Column1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.Column2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.Column3 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); @@ -52,27 +52,28 @@ | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.panel1.BackColor = System.Drawing.Color.White; - this.panel1.Controls.Add(this.btn_save); + this.panel1.Controls.Add(this.btn_role_save); this.panel1.Controls.Add(this.dataGridView1); this.panel1.Location = new System.Drawing.Point(0, 27); this.panel1.Name = "panel1"; this.panel1.Size = new System.Drawing.Size(756, 569); this.panel1.TabIndex = 0; // - // btn_Close + // btn_role_save // - this.btn_Close.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.btn_Close.BackColor = System.Drawing.Color.Transparent; - this.btn_Close.FlatAppearance.BorderSize = 0; - this.btn_Close.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.btn_Close.ForeColor = System.Drawing.Color.Transparent; - this.btn_Close.Image = global::PBAnaly.Properties.Resources.关闭White; - this.btn_Close.Location = new System.Drawing.Point(712, 0); - this.btn_Close.Name = "btn_Close"; - this.btn_Close.Size = new System.Drawing.Size(44, 28); - this.btn_Close.TabIndex = 458; - this.btn_Close.UseVisualStyleBackColor = false; - this.btn_Close.Click += new System.EventHandler(this.btn_Close_Click); + this.btn_role_save.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(32)))), ((int)(((byte)(96))))); + this.btn_role_save.FlatAppearance.BorderSize = 0; + this.btn_role_save.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btn_role_save.Font = new System.Drawing.Font("宋体", 15F, System.Drawing.FontStyle.Bold); + this.btn_role_save.ForeColor = System.Drawing.Color.White; + this.btn_role_save.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.btn_role_save.Location = new System.Drawing.Point(641, 49); + this.btn_role_save.Name = "btn_role_save"; + this.btn_role_save.Size = new System.Drawing.Size(101, 38); + this.btn_role_save.TabIndex = 506; + this.btn_role_save.Text = "保存"; + this.btn_role_save.UseVisualStyleBackColor = false; + this.btn_role_save.Click += new System.EventHandler(this.btn_save_Click); // // dataGridView1 // @@ -120,57 +121,56 @@ this.dataGridView1.Size = new System.Drawing.Size(632, 569); this.dataGridView1.TabIndex = 4; // - // btn_save + // btn_Close // - this.btn_save.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(32)))), ((int)(((byte)(96))))); - this.btn_save.FlatAppearance.BorderSize = 0; - this.btn_save.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.btn_save.Font = new System.Drawing.Font("宋体", 15F, System.Drawing.FontStyle.Bold); - this.btn_save.ForeColor = System.Drawing.Color.White; - this.btn_save.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; - this.btn_save.Location = new System.Drawing.Point(641, 49); - this.btn_save.Name = "btn_save"; - this.btn_save.Size = new System.Drawing.Size(101, 38); - this.btn_save.TabIndex = 506; - this.btn_save.Text = "保存"; - this.btn_save.UseVisualStyleBackColor = false; - this.btn_save.Click += new System.EventHandler(this.btn_save_Click); + this.btn_Close.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btn_Close.BackColor = System.Drawing.Color.Transparent; + this.btn_Close.FlatAppearance.BorderSize = 0; + this.btn_Close.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btn_Close.ForeColor = System.Drawing.Color.Transparent; + this.btn_Close.Image = global::PBAnaly.Properties.Resources.关闭White; + this.btn_Close.Location = new System.Drawing.Point(712, 0); + this.btn_Close.Name = "btn_Close"; + this.btn_Close.Size = new System.Drawing.Size(44, 28); + this.btn_Close.TabIndex = 458; + this.btn_Close.UseVisualStyleBackColor = false; + this.btn_Close.Click += new System.EventHandler(this.btn_Close_Click); // // Column1 // - this.Column1.HeaderText = "序号"; + this.Column1.HeaderText = "ID"; this.Column1.Name = "Column1"; // // Column2 // - this.Column2.HeaderText = "描述"; + this.Column2.HeaderText = "Description"; this.Column2.Name = "Column2"; this.Column2.ReadOnly = true; // // Column3 // - this.Column3.HeaderText = "操作员"; + this.Column3.HeaderText = "Operator"; this.Column3.Name = "Column3"; this.Column3.Resizable = System.Windows.Forms.DataGridViewTriState.True; this.Column3.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; // // Column4 // - this.Column4.HeaderText = "工程师"; + this.Column4.HeaderText = "Engineer"; this.Column4.Name = "Column4"; this.Column4.Resizable = System.Windows.Forms.DataGridViewTriState.True; this.Column4.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; // // Column5 // - this.Column5.HeaderText = "管理员"; + this.Column5.HeaderText = "Administrator"; this.Column5.Name = "Column5"; this.Column5.Resizable = System.Windows.Forms.DataGridViewTriState.True; this.Column5.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; // // Column6 // - this.Column6.HeaderText = "超级管理员"; + this.Column6.HeaderText = "SupperAdministrator"; this.Column6.Name = "Column6"; this.Column6.Resizable = System.Windows.Forms.DataGridViewTriState.True; this.Column6.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; @@ -198,7 +198,7 @@ private System.Windows.Forms.Panel panel1; private System.Windows.Forms.DataGridView dataGridView1; private System.Windows.Forms.Button btn_Close; - private System.Windows.Forms.Button btn_save; + private System.Windows.Forms.Button btn_role_save; private System.Windows.Forms.DataGridViewTextBoxColumn Column1; private System.Windows.Forms.DataGridViewTextBoxColumn Column2; private System.Windows.Forms.DataGridViewCheckBoxColumn Column3; diff --git a/src/PBAnaly/LoginCommon/RoleManageForm.cs b/src/PBAnaly/LoginCommon/RoleManageForm.cs index a730897..3593028 100644 --- a/src/PBAnaly/LoginCommon/RoleManageForm.cs +++ b/src/PBAnaly/LoginCommon/RoleManageForm.cs @@ -1,10 +1,14 @@ -using System; +using PBAnaly.Assist; +using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; +using System.Globalization; using System.Linq; +using System.Resources; using System.Text; +using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; @@ -20,8 +24,58 @@ namespace PBAnaly.LoginCommon this.StartPosition = FormStartPosition.CenterScreen; this.Location = new System.Drawing.Point((Screen.PrimaryScreen.WorkingArea.Width - this.Width) / 2, (Screen.PrimaryScreen.WorkingArea.Height - this.Height) / 2); + + if (GlobalData.GetProperty("Language") == "Chinese") + { + SetLanguage("zh-CN"); + } + else + { + SetLanguage("en-US"); + } + } + #region 中英文切换模块 + ResourceManager resourceManager; + private void SetLanguage(string cultureCode) + { + resourceManager = new ResourceManager("PBAnaly.Properties.Resources", typeof(MainForm).Assembly); + + // 设置当前线程的文化信息 + Thread.CurrentThread.CurrentUICulture = new CultureInfo(cultureCode); + + // 更新所有控件的文本 + UpdateControlsText(); + } + + // 更新所有控件的文本 + private void UpdateControlsText() + { + //// 遍历所有控件并更新文本 + foreach (Control control in this.Controls) + { + UpdateControlText(control); + } + } + // 更新单个控件的文本 + private void UpdateControlText(Control control) + { + //// 直接通过控件的 Name 属性获取资源字符串 + string resourceText = resourceManager.GetString(control.Name); + if (!string.IsNullOrEmpty(resourceText)) + { + control.Text = resourceText; + } + + // 如果控件包含子控件,则递归更新子控件 + foreach (Control subControl in control.Controls) + { + UpdateControlText(subControl); + } + } + #endregion + #region =====重写WndPoc方法 无边框窗体更改大小及拖动========= const int HTLEFT = 10; const int HTRIGHT = 11; diff --git a/src/PBAnaly/LoginCommon/UserManage.cs b/src/PBAnaly/LoginCommon/UserManage.cs index df74a64..7657d80 100644 --- a/src/PBAnaly/LoginCommon/UserManage.cs +++ b/src/PBAnaly/LoginCommon/UserManage.cs @@ -105,6 +105,19 @@ namespace PBAnaly.LoginCommon Console.WriteLine("表 'last' 已创建。"); } + sql = @" + CREATE TABLE IF NOT EXISTS global_property ( + property_name VARCHAR(200) NOT NULL, + property_value VARCHAR(2000) NOT NULL, + PRIMARY KEY (property_name) + );"; + + using (var command = new SQLiteCommand(sql, connection)) + { + command.ExecuteNonQuery(); // 执行SQL命令创建表 + Console.WriteLine("表 'global_property' 已创建。"); + } + // 插入数据 InsertDefaultUserData(connectionString); } diff --git a/src/PBAnaly/LoginCommon/UserManageForm.Designer.cs b/src/PBAnaly/LoginCommon/UserManageForm.Designer.cs index d583fdd..95107ff 100644 --- a/src/PBAnaly/LoginCommon/UserManageForm.Designer.cs +++ b/src/PBAnaly/LoginCommon/UserManageForm.Designer.cs @@ -45,22 +45,22 @@ this.btn_role_manage = new System.Windows.Forms.Button(); this.btn_fix_role = new System.Windows.Forms.Button(); this.txt_UserName = new System.Windows.Forms.TextBox(); - this.label11 = new System.Windows.Forms.Label(); + this.label_role_userName = new System.Windows.Forms.Label(); this.cbx_role_role = new System.Windows.Forms.ComboBox(); - this.label12 = new System.Windows.Forms.Label(); + this.label1_role = new System.Windows.Forms.Label(); this.tab_delete = new System.Windows.Forms.TabPage(); this.btn_delete_user = new System.Windows.Forms.Button(); - this.label1 = new System.Windows.Forms.Label(); + this.label_DeleteTips = new System.Windows.Forms.Label(); this.tab_fix_password = new System.Windows.Forms.TabPage(); this.btn_FixPassword = new System.Windows.Forms.Button(); this.txt_password = new System.Windows.Forms.TextBox(); - this.label3 = new System.Windows.Forms.Label(); + this.label_password_formUserManage = new System.Windows.Forms.Label(); this.txt_fix_p_UserName = new System.Windows.Forms.TextBox(); - this.label2 = new System.Windows.Forms.Label(); + this.label_Username_form_userManage = new System.Windows.Forms.Label(); this.panel1 = new System.Windows.Forms.Panel(); - this.btn_delete = new System.Windows.Forms.Button(); - this.btn_edit_password = new System.Windows.Forms.Button(); - this.btn_editRole = new System.Windows.Forms.Button(); + this.btn_delete_role = new System.Windows.Forms.Button(); + this.btn_edit_password_role = new System.Windows.Forms.Button(); + this.btn_editRole_head = new System.Windows.Forms.Button(); ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); this.splitContainer1.Panel1.SuspendLayout(); this.splitContainer1.Panel2.SuspendLayout(); @@ -131,7 +131,7 @@ // dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; this.Column1.DefaultCellStyle = dataGridViewCellStyle2; - this.Column1.HeaderText = "序号"; + this.Column1.HeaderText = "ID"; this.Column1.Name = "Column1"; this.Column1.ReadOnly = true; this.Column1.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; @@ -140,14 +140,14 @@ // dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; this.Column2.DefaultCellStyle = dataGridViewCellStyle3; - this.Column2.HeaderText = "用户名"; + this.Column2.HeaderText = "UserName"; this.Column2.Name = "Column2"; this.Column2.ReadOnly = true; this.Column2.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; // // Column5 // - this.Column5.HeaderText = "创建人"; + this.Column5.HeaderText = "Creator"; this.Column5.Name = "Column5"; this.Column5.ReadOnly = true; // @@ -155,7 +155,7 @@ // dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; this.Column3.DefaultCellStyle = dataGridViewCellStyle4; - this.Column3.HeaderText = "创建时间"; + this.Column3.HeaderText = "CreationTime"; this.Column3.Name = "Column3"; this.Column3.ReadOnly = true; this.Column3.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; @@ -164,7 +164,7 @@ // dataGridViewCellStyle5.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; this.Column4.DefaultCellStyle = dataGridViewCellStyle5; - this.Column4.HeaderText = "权限"; + this.Column4.HeaderText = "Role"; this.Column4.Name = "Column4"; this.Column4.ReadOnly = true; this.Column4.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; @@ -188,9 +188,9 @@ this.tab_fix.Controls.Add(this.btn_role_manage); this.tab_fix.Controls.Add(this.btn_fix_role); this.tab_fix.Controls.Add(this.txt_UserName); - this.tab_fix.Controls.Add(this.label11); + this.tab_fix.Controls.Add(this.label_role_userName); this.tab_fix.Controls.Add(this.cbx_role_role); - this.tab_fix.Controls.Add(this.label12); + this.tab_fix.Controls.Add(this.label1_role); this.tab_fix.Location = new System.Drawing.Point(4, 22); this.tab_fix.Name = "tab_fix"; this.tab_fix.Padding = new System.Windows.Forms.Padding(3); @@ -241,15 +241,15 @@ this.txt_UserName.Size = new System.Drawing.Size(292, 28); this.txt_UserName.TabIndex = 504; // - // label11 + // label_role_userName // - this.label11.AutoSize = true; - this.label11.Font = new System.Drawing.Font("宋体", 15F); - this.label11.Location = new System.Drawing.Point(18, 51); - this.label11.Name = "label11"; - this.label11.Size = new System.Drawing.Size(69, 20); - this.label11.TabIndex = 503; - this.label11.Text = "用户名"; + this.label_role_userName.AutoSize = true; + this.label_role_userName.Font = new System.Drawing.Font("宋体", 15F); + this.label_role_userName.Location = new System.Drawing.Point(18, 51); + this.label_role_userName.Name = "label_role_userName"; + this.label_role_userName.Size = new System.Drawing.Size(69, 20); + this.label_role_userName.TabIndex = 503; + this.label_role_userName.Text = "用户名"; // // cbx_role_role // @@ -266,20 +266,20 @@ this.cbx_role_role.Size = new System.Drawing.Size(292, 28); this.cbx_role_role.TabIndex = 502; // - // label12 + // label1_role // - this.label12.AutoSize = true; - this.label12.Font = new System.Drawing.Font("宋体", 15F); - this.label12.Location = new System.Drawing.Point(38, 148); - this.label12.Name = "label12"; - this.label12.Size = new System.Drawing.Size(49, 20); - this.label12.TabIndex = 501; - this.label12.Text = "权限"; + this.label1_role.AutoSize = true; + this.label1_role.Font = new System.Drawing.Font("宋体", 15F); + this.label1_role.Location = new System.Drawing.Point(18, 145); + this.label1_role.Name = "label1_role"; + this.label1_role.Size = new System.Drawing.Size(49, 20); + this.label1_role.TabIndex = 501; + this.label1_role.Text = "权限"; // // tab_delete // this.tab_delete.Controls.Add(this.btn_delete_user); - this.tab_delete.Controls.Add(this.label1); + this.tab_delete.Controls.Add(this.label_DeleteTips); this.tab_delete.Location = new System.Drawing.Point(4, 22); this.tab_delete.Name = "tab_delete"; this.tab_delete.Padding = new System.Windows.Forms.Padding(3); @@ -304,22 +304,22 @@ this.btn_delete_user.UseVisualStyleBackColor = false; this.btn_delete_user.Click += new System.EventHandler(this.btn_delete_user_Click); // - // label1 + // label_DeleteTips // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(119, 17); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(161, 12); - this.label1.TabIndex = 0; - this.label1.Text = "选中左侧表格的一行即可删除"; + this.label_DeleteTips.AutoSize = true; + this.label_DeleteTips.Location = new System.Drawing.Point(119, 17); + this.label_DeleteTips.Name = "label_DeleteTips"; + this.label_DeleteTips.Size = new System.Drawing.Size(161, 12); + this.label_DeleteTips.TabIndex = 0; + this.label_DeleteTips.Text = "选中左侧表格的一行即可删除"; // // tab_fix_password // this.tab_fix_password.Controls.Add(this.btn_FixPassword); this.tab_fix_password.Controls.Add(this.txt_password); - this.tab_fix_password.Controls.Add(this.label3); + this.tab_fix_password.Controls.Add(this.label_password_formUserManage); this.tab_fix_password.Controls.Add(this.txt_fix_p_UserName); - this.tab_fix_password.Controls.Add(this.label2); + this.tab_fix_password.Controls.Add(this.label_Username_form_userManage); this.tab_fix_password.Location = new System.Drawing.Point(4, 22); this.tab_fix_password.Name = "tab_fix_password"; this.tab_fix_password.Padding = new System.Windows.Forms.Padding(3); @@ -333,7 +333,7 @@ this.btn_FixPassword.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(32)))), ((int)(((byte)(96))))); this.btn_FixPassword.FlatAppearance.BorderSize = 0; this.btn_FixPassword.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.btn_FixPassword.Font = new System.Drawing.Font("宋体", 15F, System.Drawing.FontStyle.Bold); + this.btn_FixPassword.Font = new System.Drawing.Font("宋体", 13F, System.Drawing.FontStyle.Bold); this.btn_FixPassword.ForeColor = System.Drawing.Color.White; this.btn_FixPassword.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; this.btn_FixPassword.Location = new System.Drawing.Point(285, 216); @@ -347,108 +347,108 @@ // txt_password // this.txt_password.Font = new System.Drawing.Font("宋体", 10F); - this.txt_password.Location = new System.Drawing.Point(94, 148); + this.txt_password.Location = new System.Drawing.Point(98, 148); this.txt_password.Multiline = true; this.txt_password.Name = "txt_password"; this.txt_password.Size = new System.Drawing.Size(292, 28); this.txt_password.TabIndex = 508; // - // label3 + // label_password_formUserManage // - this.label3.AutoSize = true; - this.label3.Font = new System.Drawing.Font("宋体", 15F); - this.label3.Location = new System.Drawing.Point(39, 156); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(49, 20); - this.label3.TabIndex = 507; - this.label3.Text = "密码"; + this.label_password_formUserManage.AutoSize = true; + this.label_password_formUserManage.Font = new System.Drawing.Font("宋体", 13F); + this.label_password_formUserManage.Location = new System.Drawing.Point(19, 158); + this.label_password_formUserManage.Name = "label_password_formUserManage"; + this.label_password_formUserManage.Size = new System.Drawing.Size(44, 18); + this.label_password_formUserManage.TabIndex = 507; + this.label_password_formUserManage.Text = "密码"; // // txt_fix_p_UserName // this.txt_fix_p_UserName.Font = new System.Drawing.Font("宋体", 13F); - this.txt_fix_p_UserName.Location = new System.Drawing.Point(94, 46); + this.txt_fix_p_UserName.Location = new System.Drawing.Point(98, 46); this.txt_fix_p_UserName.Multiline = true; this.txt_fix_p_UserName.Name = "txt_fix_p_UserName"; this.txt_fix_p_UserName.ReadOnly = true; this.txt_fix_p_UserName.Size = new System.Drawing.Size(292, 28); this.txt_fix_p_UserName.TabIndex = 506; // - // label2 + // label_Username_form_userManage // - this.label2.AutoSize = true; - this.label2.Font = new System.Drawing.Font("宋体", 15F); - this.label2.Location = new System.Drawing.Point(19, 54); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(69, 20); - this.label2.TabIndex = 505; - this.label2.Text = "用户名"; + this.label_Username_form_userManage.AutoSize = true; + this.label_Username_form_userManage.Font = new System.Drawing.Font("宋体", 13F); + this.label_Username_form_userManage.Location = new System.Drawing.Point(19, 54); + this.label_Username_form_userManage.Name = "label_Username_form_userManage"; + this.label_Username_form_userManage.Size = new System.Drawing.Size(62, 18); + this.label_Username_form_userManage.TabIndex = 505; + this.label_Username_form_userManage.Text = "用户名"; // // panel1 // this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.panel1.Controls.Add(this.btn_delete); - this.panel1.Controls.Add(this.btn_edit_password); - this.panel1.Controls.Add(this.btn_editRole); + this.panel1.Controls.Add(this.btn_delete_role); + this.panel1.Controls.Add(this.btn_edit_password_role); + this.panel1.Controls.Add(this.btn_editRole_head); this.panel1.Location = new System.Drawing.Point(3, 3); this.panel1.Name = "panel1"; this.panel1.Size = new System.Drawing.Size(429, 43); this.panel1.TabIndex = 453; // - // btn_delete + // btn_delete_role // - this.btn_delete.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + this.btn_delete_role.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.btn_delete.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(32)))), ((int)(((byte)(96))))); - this.btn_delete.FlatAppearance.BorderSize = 0; - this.btn_delete.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.btn_delete.Font = new System.Drawing.Font("宋体", 15F, System.Drawing.FontStyle.Bold); - this.btn_delete.ForeColor = System.Drawing.Color.White; - this.btn_delete.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; - this.btn_delete.Location = new System.Drawing.Point(181, 2); - this.btn_delete.Name = "btn_delete"; - this.btn_delete.Size = new System.Drawing.Size(78, 38); - this.btn_delete.TabIndex = 498; - this.btn_delete.Text = "删除"; - this.btn_delete.UseVisualStyleBackColor = false; - this.btn_delete.Click += new System.EventHandler(this.btn_delete_Click); + this.btn_delete_role.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(32)))), ((int)(((byte)(96))))); + this.btn_delete_role.FlatAppearance.BorderSize = 0; + this.btn_delete_role.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btn_delete_role.Font = new System.Drawing.Font("宋体", 13F, System.Drawing.FontStyle.Bold); + this.btn_delete_role.ForeColor = System.Drawing.Color.White; + this.btn_delete_role.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.btn_delete_role.Location = new System.Drawing.Point(181, 2); + this.btn_delete_role.Name = "btn_delete_role"; + this.btn_delete_role.Size = new System.Drawing.Size(78, 38); + this.btn_delete_role.TabIndex = 498; + this.btn_delete_role.Text = "删除"; + this.btn_delete_role.UseVisualStyleBackColor = false; + this.btn_delete_role.Click += new System.EventHandler(this.btn_delete_Click); // - // btn_edit_password + // btn_edit_password_role // - this.btn_edit_password.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + this.btn_edit_password_role.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Right))); - this.btn_edit_password.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(32)))), ((int)(((byte)(96))))); - this.btn_edit_password.FlatAppearance.BorderSize = 0; - this.btn_edit_password.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.btn_edit_password.Font = new System.Drawing.Font("宋体", 15F, System.Drawing.FontStyle.Bold); - this.btn_edit_password.ForeColor = System.Drawing.Color.White; - this.btn_edit_password.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; - this.btn_edit_password.Location = new System.Drawing.Point(321, 2); - this.btn_edit_password.Name = "btn_edit_password"; - this.btn_edit_password.Size = new System.Drawing.Size(101, 38); - this.btn_edit_password.TabIndex = 499; - this.btn_edit_password.Text = "修改密码"; - this.btn_edit_password.UseVisualStyleBackColor = false; - this.btn_edit_password.Click += new System.EventHandler(this.btn_edit_password_Click); + this.btn_edit_password_role.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(32)))), ((int)(((byte)(96))))); + this.btn_edit_password_role.FlatAppearance.BorderSize = 0; + this.btn_edit_password_role.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btn_edit_password_role.Font = new System.Drawing.Font("宋体", 13F, System.Drawing.FontStyle.Bold); + this.btn_edit_password_role.ForeColor = System.Drawing.Color.White; + this.btn_edit_password_role.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.btn_edit_password_role.Location = new System.Drawing.Point(321, 2); + this.btn_edit_password_role.Name = "btn_edit_password_role"; + this.btn_edit_password_role.Size = new System.Drawing.Size(101, 38); + this.btn_edit_password_role.TabIndex = 499; + this.btn_edit_password_role.Text = "修改密码"; + this.btn_edit_password_role.UseVisualStyleBackColor = false; + this.btn_edit_password_role.Click += new System.EventHandler(this.btn_edit_password_Click); // - // btn_editRole + // btn_editRole_head // - this.btn_editRole.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + this.btn_editRole_head.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left))); - this.btn_editRole.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(32)))), ((int)(((byte)(96))))); - this.btn_editRole.FlatAppearance.BorderSize = 0; - this.btn_editRole.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.btn_editRole.Font = new System.Drawing.Font("宋体", 15F, System.Drawing.FontStyle.Bold); - this.btn_editRole.ForeColor = System.Drawing.Color.White; - this.btn_editRole.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; - this.btn_editRole.Location = new System.Drawing.Point(7, 3); - this.btn_editRole.Name = "btn_editRole"; - this.btn_editRole.Size = new System.Drawing.Size(101, 38); - this.btn_editRole.TabIndex = 497; - this.btn_editRole.Text = "修改权限"; - this.btn_editRole.UseVisualStyleBackColor = false; - this.btn_editRole.Click += new System.EventHandler(this.btn_editRole_Click); + this.btn_editRole_head.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(32)))), ((int)(((byte)(96))))); + this.btn_editRole_head.FlatAppearance.BorderSize = 0; + this.btn_editRole_head.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btn_editRole_head.Font = new System.Drawing.Font("宋体", 13F, System.Drawing.FontStyle.Bold); + this.btn_editRole_head.ForeColor = System.Drawing.Color.White; + this.btn_editRole_head.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.btn_editRole_head.Location = new System.Drawing.Point(7, 3); + this.btn_editRole_head.Name = "btn_editRole_head"; + this.btn_editRole_head.Size = new System.Drawing.Size(101, 38); + this.btn_editRole_head.TabIndex = 497; + this.btn_editRole_head.Text = "修改权限"; + this.btn_editRole_head.UseVisualStyleBackColor = false; + this.btn_editRole_head.Click += new System.EventHandler(this.btn_editRole_Click); // // UserManageForm // @@ -480,31 +480,31 @@ private System.Windows.Forms.SplitContainer splitContainer1; private System.Windows.Forms.DataGridView dataGridView1; - private System.Windows.Forms.DataGridViewTextBoxColumn Column1; - private System.Windows.Forms.DataGridViewTextBoxColumn Column2; - private System.Windows.Forms.DataGridViewTextBoxColumn Column5; - private System.Windows.Forms.DataGridViewTextBoxColumn Column3; - private System.Windows.Forms.DataGridViewTextBoxColumn Column4; private System.Windows.Forms.Panel panel1; - private System.Windows.Forms.Button btn_delete; - private System.Windows.Forms.Button btn_edit_password; - private System.Windows.Forms.Button btn_editRole; + private System.Windows.Forms.Button btn_delete_role; + private System.Windows.Forms.Button btn_edit_password_role; + private System.Windows.Forms.Button btn_editRole_head; private System.Windows.Forms.TabControl tabControl1; private System.Windows.Forms.TabPage tab_fix; private System.Windows.Forms.TabPage tab_delete; private System.Windows.Forms.TabPage tab_fix_password; private System.Windows.Forms.Button btn_fix_role; private System.Windows.Forms.TextBox txt_UserName; - private System.Windows.Forms.Label label11; + private System.Windows.Forms.Label label_role_userName; private System.Windows.Forms.ComboBox cbx_role_role; - private System.Windows.Forms.Label label12; + private System.Windows.Forms.Label label1_role; private System.Windows.Forms.Button btn_delete_user; - private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label_DeleteTips; private System.Windows.Forms.Button btn_FixPassword; private System.Windows.Forms.TextBox txt_password; - private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label_password_formUserManage; private System.Windows.Forms.TextBox txt_fix_p_UserName; - private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label_Username_form_userManage; private System.Windows.Forms.Button btn_role_manage; + private System.Windows.Forms.DataGridViewTextBoxColumn Column1; + private System.Windows.Forms.DataGridViewTextBoxColumn Column2; + private System.Windows.Forms.DataGridViewTextBoxColumn Column5; + private System.Windows.Forms.DataGridViewTextBoxColumn Column3; + private System.Windows.Forms.DataGridViewTextBoxColumn Column4; } } \ No newline at end of file diff --git a/src/PBAnaly/LoginCommon/UserManageForm.cs b/src/PBAnaly/LoginCommon/UserManageForm.cs index 25ed097..6f71626 100644 --- a/src/PBAnaly/LoginCommon/UserManageForm.cs +++ b/src/PBAnaly/LoginCommon/UserManageForm.cs @@ -1,10 +1,14 @@ -using System; +using PBAnaly.Assist; +using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; +using System.Globalization; using System.Linq; +using System.Resources; using System.Text; +using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; @@ -19,8 +23,57 @@ namespace PBAnaly.LoginCommon panel1.BringToFront(); SetMainMenuButtonCilkeColor("btn_editRole"); + + if (GlobalData.GetProperty("Language") == "Chinese") + { + SetLanguage("zh-CN"); + } + else + { + SetLanguage("en-US"); + } } + #region 中英文切换模块 + ResourceManager resourceManager; + private void SetLanguage(string cultureCode) + { + resourceManager = new ResourceManager("PBAnaly.Properties.Resources", typeof(MainForm).Assembly); + + // 设置当前线程的文化信息 + Thread.CurrentThread.CurrentUICulture = new CultureInfo(cultureCode); + + // 更新所有控件的文本 + UpdateControlsText(); + } + + // 更新所有控件的文本 + private void UpdateControlsText() + { + //// 遍历所有控件并更新文本 + foreach (Control control in this.Controls) + { + UpdateControlText(control); + } + } + // 更新单个控件的文本 + private void UpdateControlText(Control control) + { + //// 直接通过控件的 Name 属性获取资源字符串 + string resourceText = resourceManager.GetString(control.Name); + if (!string.IsNullOrEmpty(resourceText)) + { + control.Text = resourceText; + } + + // 如果控件包含子控件,则递归更新子控件 + foreach (Control subControl in control.Controls) + { + UpdateControlText(subControl); + } + } + #endregion + #region InitUser 加载全部的用户 root除外 /// /// 加载全部的用户 root除外 diff --git a/src/PBAnaly/MainForm.Designer.cs b/src/PBAnaly/MainForm.Designer.cs index e0ce7bb..2ecc3fc 100644 --- a/src/PBAnaly/MainForm.Designer.cs +++ b/src/PBAnaly/MainForm.Designer.cs @@ -85,7 +85,7 @@ this.metroPanel_RightTop.Location = new System.Drawing.Point(210, 0); this.metroPanel_RightTop.Margin = new System.Windows.Forms.Padding(0); this.metroPanel_RightTop.Name = "metroPanel_RightTop"; - this.metroPanel_RightTop.Size = new System.Drawing.Size(569, 55); + this.metroPanel_RightTop.Size = new System.Drawing.Size(652, 55); this.metroPanel_RightTop.TabIndex = 12; this.metroPanel_RightTop.Theme = MetroFramework.MetroThemeStyle.Dark; this.metroPanel_RightTop.UseCustomBackColor = true; @@ -228,7 +228,7 @@ this.tableLayoutPanel1.ColumnCount = 3; this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 210F)); this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 318F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 235F)); this.tableLayoutPanel1.Controls.Add(this.tl_right_main_view, 1, 2); this.tableLayoutPanel1.Controls.Add(this.metroPanel_RightTop, 1, 0); this.tableLayoutPanel1.Controls.Add(this.CompanyIcon_pictureBox, 0, 0); @@ -259,7 +259,7 @@ this.tl_right_main_view.RowCount = 2; this.tl_right_main_view.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); this.tl_right_main_view.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tl_right_main_view.Size = new System.Drawing.Size(569, 495); + this.tl_right_main_view.Size = new System.Drawing.Size(652, 495); this.tl_right_main_view.TabIndex = 0; // // DataProcess_panel @@ -272,7 +272,7 @@ this.DataProcess_panel.Name = "DataProcess_panel"; this.DataProcess_panel.Padding = new System.Windows.Forms.Padding(5); this.tl_right_main_view.SetRowSpan(this.DataProcess_panel, 2); - this.DataProcess_panel.Size = new System.Drawing.Size(563, 489); + this.DataProcess_panel.Size = new System.Drawing.Size(646, 489); this.DataProcess_panel.SmoothingType = System.Drawing.Drawing2D.SmoothingMode.HighQuality; this.DataProcess_panel.TabIndex = 19; this.DataProcess_panel.Text = "panel1"; @@ -448,7 +448,7 @@ this.flowLayoutPanel2.Location = new System.Drawing.Point(210, 55); this.flowLayoutPanel2.Margin = new System.Windows.Forms.Padding(0); this.flowLayoutPanel2.Name = "flowLayoutPanel2"; - this.flowLayoutPanel2.Size = new System.Drawing.Size(569, 31); + this.flowLayoutPanel2.Size = new System.Drawing.Size(652, 31); this.flowLayoutPanel2.TabIndex = 19; // // materialButton_changeFormSize @@ -623,7 +623,7 @@ this.materialButton_return.Depth = 0; this.materialButton_return.HighEmphasis = true; this.materialButton_return.Icon = ((System.Drawing.Image)(resources.GetObject("materialButton_return.Icon"))); - this.materialButton_return.Location = new System.Drawing.Point(0, 36); + this.materialButton_return.Location = new System.Drawing.Point(512, 0); this.materialButton_return.Margin = new System.Windows.Forms.Padding(0); this.materialButton_return.MouseState = MaterialSkin.MouseState.HOVER; this.materialButton_return.Name = "materialButton_return"; @@ -641,12 +641,12 @@ this.pl_right.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(39)))), ((int)(((byte)(51)))), ((int)(((byte)(63))))); this.pl_right.Dock = System.Windows.Forms.DockStyle.Fill; this.pl_right.EdgeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(41)))), ((int)(((byte)(50))))); - this.pl_right.Location = new System.Drawing.Point(781, 57); + this.pl_right.Location = new System.Drawing.Point(864, 57); this.pl_right.Margin = new System.Windows.Forms.Padding(2); this.pl_right.Name = "pl_right"; this.pl_right.Padding = new System.Windows.Forms.Padding(4); this.tableLayoutPanel1.SetRowSpan(this.pl_right, 2); - this.pl_right.Size = new System.Drawing.Size(314, 522); + this.pl_right.Size = new System.Drawing.Size(231, 522); this.pl_right.SmoothingType = System.Drawing.Drawing2D.SmoothingMode.HighQuality; this.pl_right.TabIndex = 20; this.pl_right.Text = "panel1"; diff --git a/src/PBAnaly/MainForm.cs b/src/PBAnaly/MainForm.cs index b9f65e8..2bf1534 100644 --- a/src/PBAnaly/MainForm.cs +++ b/src/PBAnaly/MainForm.cs @@ -12,8 +12,10 @@ using System; using System.Collections.Generic; using System.Data; using System.Drawing; +using System.Globalization; using System.IO; using System.Linq; +using System.Resources; using System.Threading; using System.Windows.Forms; using System.Xml.Linq; @@ -79,6 +81,7 @@ namespace PBAnaly loginForm.Hide(); + GlobalData.PropertyChanged += OnGlobalDataPropertyChanged; UserManage.LogionUserChanged += OnLogionUserChanged; InitAccessControls(); @@ -89,10 +92,87 @@ namespace PBAnaly FormGenerate_X = 0; FormGenerate_Y = 0; + + if (GlobalData.GetProperty("Language") == "Chinese") + { + SetLanguage("zh-CN"); + } + else + { + SetLanguage("en-US"); + } // initPanel(); } + #region OnGlobalDataPropertyChanged 处理全局属性更改事件 + /// + /// 处理全局属性更改事件 + /// + /// 发生变化的属性名 + /// 更改的属性值 + private void OnGlobalDataPropertyChanged(string name, string value) + { + switch (name) + { + case "Language": + if (GlobalData.GetProperty("Language") == "Chinese") + { + SetLanguage("zh-CN"); + } + else + { + SetLanguage("en-US"); + } + break; + default: + break; + } + } + + #endregion + + #region 中英文切换 + ResourceManager resourceManager; + private void SetLanguage(string cultureCode) + { + resourceManager = new ResourceManager("PBAnaly.Properties.Resources", typeof(MainForm).Assembly); + + // 设置当前线程的文化信息 + Thread.CurrentThread.CurrentUICulture = new CultureInfo(cultureCode); + + // 更新所有控件的文本 + UpdateControlsText(); + } + + // 更新所有控件的文本 + private void UpdateControlsText() + { + //// 遍历所有控件并更新文本 + foreach (Control control in this.Controls) + { + UpdateControlText(control); + } + } + // 更新单个控件的文本 + private void UpdateControlText(Control control) + { + //// 直接通过控件的 Name 属性获取资源字符串 + string resourceText = resourceManager.GetString(control.Name); + if (!string.IsNullOrEmpty(resourceText)) + { + control.Text = resourceText; + } + + // 如果控件包含子控件,则递归更新子控件 + foreach (Control subControl in control.Controls) + { + UpdateControlText(subControl); + } + } + + #endregion + #region 重新梳理权限控制,控件的权限可通过管理员进行配置 /// /// 用于权限控制,将所有要管控的控件保存到mControls中 @@ -351,8 +431,6 @@ namespace PBAnaly #endregion - - [System.Runtime.InteropServices.DllImport("user32.dll")] private static extern int SendMessage(IntPtr hWnd, int wMsg, bool wParam, int lParm); private const int WM_SETREDRAW = 11; @@ -382,7 +460,17 @@ namespace PBAnaly if (sender is Button) { Button btn = sender as Button; - this.btnStartUpToolTip.SetToolTip(btn, "适配窗口"); + + if (GlobalData.GetProperty("Language") == "Chinese") + { + this.btnStartUpToolTip.SetToolTip(btn, "适配窗口"); + } + else + { + this.btnStartUpToolTip.SetToolTip(btn, "Adaptation window"); + } + + } } @@ -391,7 +479,16 @@ namespace PBAnaly if (sender is Button) { Button btn = sender as Button; - this.btnStartUpToolTip.SetToolTip(btn, "图像变换"); + + if (GlobalData.GetProperty("Language") == "Chinese") + { + this.btnStartUpToolTip.SetToolTip(btn, "图像变换"); + } + else + { + this.btnStartUpToolTip.SetToolTip(btn, "Image transformation"); + } + } } @@ -400,7 +497,15 @@ namespace PBAnaly if (sender is Button) { Button btn = sender as Button; - this.btnStartUpToolTip.SetToolTip(btn, "伪彩"); + if (GlobalData.GetProperty("Language") == "Chinese") + { + this.btnStartUpToolTip.SetToolTip(btn, "伪彩"); + } + else + { + this.btnStartUpToolTip.SetToolTip(btn, "Image transformation"); + } + } } @@ -409,7 +514,15 @@ namespace PBAnaly if (sender is Button) { Button btn = sender as Button; - this.btnStartUpToolTip.SetToolTip(btn, "图像信息"); + if (GlobalData.GetProperty("Language") == "Chinese") + { + this.btnStartUpToolTip.SetToolTip(btn, "图像信息"); + } + else + { + this.btnStartUpToolTip.SetToolTip(btn, "Image information"); + } + } } @@ -418,7 +531,15 @@ namespace PBAnaly if (sender is Button) { Button btn = sender as Button; - this.btnStartUpToolTip.SetToolTip(btn, "重置原图"); + if (GlobalData.GetProperty("Language") == "Chinese") + { + this.btnStartUpToolTip.SetToolTip(btn, "重置原图"); + } + else + { + this.btnStartUpToolTip.SetToolTip(btn, "Reset artwork"); + } + } } @@ -427,7 +548,15 @@ namespace PBAnaly if (sender is Button) { Button btn = sender as Button; - this.btnStartUpToolTip.SetToolTip(btn, "反值"); + if (GlobalData.GetProperty("Language") == "Chinese") + { + this.btnStartUpToolTip.SetToolTip(btn, "反值"); + } + else + { + this.btnStartUpToolTip.SetToolTip(btn, "Inverse value"); + } + } } @@ -436,7 +565,15 @@ namespace PBAnaly if (sender is Button) { Button btn = sender as Button; - this.btnStartUpToolTip.SetToolTip(btn, "Ctrl + S 保存"); + if (GlobalData.GetProperty("Language") == "Chinese") + { + this.btnStartUpToolTip.SetToolTip(btn, "Ctrl + S 保存"); + } + else + { + this.btnStartUpToolTip.SetToolTip(btn, "Ctrl + S save"); + } + } } @@ -445,7 +582,15 @@ namespace PBAnaly if (sender is Button) { Button btn = sender as Button; - this.btnStartUpToolTip.SetToolTip(btn, "Ctrl + Z 撤銷"); + if (GlobalData.GetProperty("Language") == "Chinese") + { + this.btnStartUpToolTip.SetToolTip(btn, "Ctrl + Z 撤銷"); + } + else + { + this.btnStartUpToolTip.SetToolTip(btn, "Ctrl + Z revocation"); + } + } } @@ -454,7 +599,15 @@ namespace PBAnaly if (sender is Button) { Button btn = sender as Button; - this.btnStartUpToolTip.SetToolTip(btn, "Ctrl + Y 重做"); + if (GlobalData.GetProperty("Language") == "Chinese") + { + this.btnStartUpToolTip.SetToolTip(btn, "Ctrl + Y 重做"); + } + else + { + this.btnStartUpToolTip.SetToolTip(btn, "Ctrl + Y renewal"); + } + } } @@ -954,5 +1107,7 @@ namespace PBAnaly { } + + } } diff --git a/src/PBAnaly/MainForm.resx b/src/PBAnaly/MainForm.resx index 09b4447..e7d403f 100644 --- a/src/PBAnaly/MainForm.resx +++ b/src/PBAnaly/MainForm.resx @@ -563,6 +563,455 @@ 17, 17 + + + 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 + Y8xOY6+9fghokNfA1CcF5wAAAABJRU5ErkJggg== + + + + + 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 @@ -1292,455 +1741,6 @@ 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 - Y8xOY6+9fghokNfA1CcF5wAAAABJRU5ErkJggg== - - - - - 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 diff --git a/src/PBAnaly/PBAnaly.csproj b/src/PBAnaly/PBAnaly.csproj index 79d6bb5..3b8c56b 100644 --- a/src/PBAnaly/PBAnaly.csproj +++ b/src/PBAnaly/PBAnaly.csproj @@ -57,6 +57,7 @@ + Form @@ -131,6 +132,7 @@ + Form @@ -253,16 +255,9 @@ MainForm.cs - - ResXFileCodeGenerator - Resources.Designer.cs - Designer - - - True - Resources.resx - True - + + + SettingForm.cs diff --git a/src/PBAnaly/Program.cs b/src/PBAnaly/Program.cs index 696d37f..fd5d5e1 100644 --- a/src/PBAnaly/Program.cs +++ b/src/PBAnaly/Program.cs @@ -5,6 +5,7 @@ using System.Windows.Forms; using PBAnaly.Module; using PBAnaly.UI; using PBAnaly.LoginCommon; +using PBAnaly.Assist; namespace PBAnaly { public static class Global @@ -63,11 +64,11 @@ namespace PBAnaly } - if (Util.ViKeySoft.Instance.CheckViKey() == false) - { - MessageBox.Show("你没有权限,请检查加密狗是否插入","警告"); - return; - } + //if (Util.ViKeySoft.Instance.CheckViKey() == false) + //{ + // MessageBox.Show("你没有权限,请检查加密狗是否插入","警告"); + // return; + //} Util.ViKeySoft.Instance.Uninitializatio(); #if true Application.EnableVisualStyles(); @@ -77,6 +78,7 @@ namespace PBAnaly string dbPath = "UserManage.db"; string connectionString = $"Data Source={dbPath};Version=3;"; UserManage.ConnectDb(); + GlobalData.LoadGlobalPropertyFromDb(); //AccessControl.LoadConfig();//加载权限 var login = new LoginForm(); login.StartPosition = FormStartPosition.CenterScreen; diff --git a/src/PBAnaly/Properties/Resources.en-US.resx b/src/PBAnaly/Properties/Resources.en-US.resx new file mode 100644 index 0000000..599f241 --- /dev/null +++ b/src/PBAnaly/Properties/Resources.en-US.resx @@ -0,0 +1,328 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + + + Back + + + Name + + + Question + + + Answer + + + Password + + + FIND + + + Login + + + Remember Me + + + Forgot your password? Click back + + + Login + + + Register + + + Back + + + Name + + + Password + + + Password + + + Question + + + register + + + EditRole + + + Delete + + + FixPass + + + Name + + + Role + + + ChangeRole + + + Delete + + + Password + + + Name + + + FixPassword + + + LoadData + + + ExportMap + + + DataAnalyze + + + Waveform + + + System + + + Log + + + MapDeal + + + AcidAnalyze + + + RoiAnalyze + + + MiniAnalyze + + + Dotcounts + + + Correction + + + Show + + + Mode + + + RoleManage + + + Save + + + Answer + + + Select one line and delete it + + + Photon + + + Trans-fluorescence + + + FindLane + + + path + + + One + + + Last + + + Next + + + finally + + + SaveTIF + + + Close + + + Open + + + Enter + + + Cancel + + + Lane + + + LaneWidth + + + InitialWell + + + Stripe + + + conformity + + + Dark/Light Theme + + + Setting + + + SystemSetting + + + UserManage + + + Language: + + \ No newline at end of file diff --git a/src/PBAnaly/Properties/Resources.resx b/src/PBAnaly/Properties/Resources.resx index bc4101a..4aa8e68 100644 --- a/src/PBAnaly/Properties/Resources.resx +++ b/src/PBAnaly/Properties/Resources.resx @@ -118,24 +118,15 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - ..\Resources\Black_Blue_0.bmp;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Resources\计数器.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\返回前台.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\yto-icon-X-transit_time.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Resources\关闭White.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\EtBr_1.bmp;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Resources\壁纸.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -172,9 +163,6 @@ ..\Resources\波形设置-未选中.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\Gray.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Resources\Black_Blue_1.bmp;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -193,9 +181,6 @@ ..\Resources\圆形.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\Black_Red_0.bmp;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Resources\京仪科技定稿_画板 1 副本2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -211,21 +196,12 @@ ..\Resources\风控.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\Black_SDS_1.bmp;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Resources\饼干.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\控制窗口.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\Black_SDS_0.bmp;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\EtBr_0.bmp;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Resources\Black_Yley_0.bmp;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -238,12 +214,6 @@ ..\Resources\YellowHot_0.bmp;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\Pseudo_0.bmp;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\C.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Resources\图片管理.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -262,21 +232,12 @@ ..\Resources\缩小.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\Black_Yley_1.bmp;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Resources\導出.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\Pseudo_1.bmp;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Resources\线段.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\10矩形.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Resources\最大化white.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -310,4 +271,208 @@ ..\Resources\登录-亮.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + 返回 + + + 用户名 + + + 密保问题 + + + 答案 + + + 你的密码 + + + 找回 + + + 登录 + + + 记住登录 + + + 忘记密码?点击找回 + + + 登录 + + + 注册 + + + 返回 + + + 用户名 + + + 密码 + + + 确认密码 + + + 密保问题 + + + 注册 + + + 修改权限 + + + 删除 + + + 修改密码 + + + 用户名 + + + 权限 + + + 修改权限 + + + 删除 + + + 密码 + + + 用户名 + + + 修改密码 + + + 加载数据 + + + 导出图像 + + + 数据分析 + + + 泳道波形图 + + + 系统操作 + + + 操作日志 + + + 图像处理 + + + 泳道分析 + + + ROI分析 + + + 微孔版分析 + + + 菌落技术 + + + 蛋白归一化 + + + 显示 + + + 模式 + + + 权限管理 + + + 保存 + + + 答案 + + + 提示 + + + 光子量 + + + 反式荧光 + + + 查找泳道 + + + 路径 + + + 第一幅 + + + 上一页 + + + 下一页 + + + 最后 + + + 另存为 + + + 关闭 + + + 打开当前帧 + + + 确定 + + + 取消 + + + 泳道 + + + 统一泳道宽度 + + + 初始井 + + + 条带 + + + 整合 + + + 光/暗 主题 + + + 设置 + + + 系统设置 + + + 用户管理 + + + 语言 + \ No newline at end of file diff --git a/src/PBAnaly/Properties/Resources.zh-CN.resx b/src/PBAnaly/Properties/Resources.zh-CN.resx new file mode 100644 index 0000000..5e8f7d4 --- /dev/null +++ b/src/PBAnaly/Properties/Resources.zh-CN.resx @@ -0,0 +1,328 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + + + 返回 + + + 用户名 + + + 密保问题 + + + 答案 + + + 你的密码 + + + 找回 + + + 登录 + + + 记住本次登录 + + + 忘记密码?点击找回 + + + 登录 + + + 注册 + + + 返回 + + + 用户名 + + + 密码 + + + 确认密码 + + + 密保问题 + + + 注册 + + + 修改权限 + + + 删除 + + + 修改密码 + + + 用户名 + + + 权限 + + + 修改权限 + + + 删除 + + + 密码 + + + 用户名 + + + 修改密码 + + + 加载数据 + + + 导出图像 + + + 数据分析 + + + 泳道波形图 + + + 系统操作 + + + 操作日志 + + + 图像处理 + + + 泳道分析 + + + ROI分析 + + + 微孔版分析 + + + 菌落技术 + + + 蛋白归一化 + + + 显示 + + + 模式 + + + 权限管理 + + + 保存 + + + 答案 + + + 选中表格中一行删掉即可 + + + 光子量 + + + 反式荧光 + + + 查找泳道 + + + 路径 + + + 第一幅 + + + 上一页 + + + 下一页 + + + 最后 + + + 另存为单帧TIF + + + 关闭 + + + 打开当前帧 + + + 确定 + + + 取消 + + + 泳道 + + + 统一泳道宽度 + + + 初始井 + + + 条带 + + + 整合 + + + 光/暗 主题 + + + 设置 + + + 系统设置 + + + 用户管理 + + + 语言 + + \ No newline at end of file diff --git a/src/PBAnaly/UI/AnalyzeDataForm.Designer.cs b/src/PBAnaly/UI/AnalyzeDataForm.Designer.cs index 7b781c5..04af214 100644 --- a/src/PBAnaly/UI/AnalyzeDataForm.Designer.cs +++ b/src/PBAnaly/UI/AnalyzeDataForm.Designer.cs @@ -104,7 +104,7 @@ this.metroPanel1.Location = new System.Drawing.Point(0, 25); this.metroPanel1.Margin = new System.Windows.Forms.Padding(0); this.metroPanel1.Name = "metroPanel1"; - this.metroPanel1.Size = new System.Drawing.Size(1223, 29); + this.metroPanel1.Size = new System.Drawing.Size(1303, 29); this.metroPanel1.Style = ReaLTaiizor.Enum.Metro.Style.Custom; this.metroPanel1.StyleManager = null; this.metroPanel1.TabIndex = 3; @@ -135,7 +135,7 @@ this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25F)); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 29F)); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(1223, 905); + this.tableLayoutPanel1.Size = new System.Drawing.Size(1303, 1073); this.tableLayoutPanel1.TabIndex = 3; // // panel1 @@ -147,8 +147,8 @@ this.panel1.EdgeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(41)))), ((int)(((byte)(50))))); this.panel1.Location = new System.Drawing.Point(3, 57); this.panel1.Name = "panel1"; - this.panel1.Padding = new System.Windows.Forms.Padding(5, 5, 5, 5); - this.panel1.Size = new System.Drawing.Size(1217, 845); + this.panel1.Padding = new System.Windows.Forms.Padding(5); + this.panel1.Size = new System.Drawing.Size(1297, 1013); this.panel1.SmoothingType = System.Drawing.Drawing2D.SmoothingMode.HighQuality; this.panel1.TabIndex = 4; this.panel1.Text = "panel1"; @@ -161,14 +161,14 @@ this.dataGridView1.Name = "dataGridView1"; this.dataGridView1.RowHeadersWidth = 51; this.dataGridView1.RowTemplate.Height = 23; - this.dataGridView1.Size = new System.Drawing.Size(1207, 835); + this.dataGridView1.Size = new System.Drawing.Size(1287, 1003); this.dataGridView1.TabIndex = 0; // // AnalyzeDataForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(1229, 932); + this.ClientSize = new System.Drawing.Size(1309, 1100); this.Controls.Add(this.tableLayoutPanel1); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; this.FormStyle = MaterialSkin.Controls.MaterialForm.FormStyles.ActionBar_None; diff --git a/src/PBAnaly/UI/AnalyzeDataForm.cs b/src/PBAnaly/UI/AnalyzeDataForm.cs index 5e71a2c..248b7c3 100644 --- a/src/PBAnaly/UI/AnalyzeDataForm.cs +++ b/src/PBAnaly/UI/AnalyzeDataForm.cs @@ -1,4 +1,5 @@ using MaterialSkin.Controls; +using PBAnaly.Assist; using PBBiologyVC; //using ReaLTaiizor.Util; //using Sunny.UI.Win32; @@ -7,8 +8,11 @@ using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; +using System.Globalization; using System.Linq; +using System.Resources; using System.Text; +using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; @@ -51,8 +55,57 @@ namespace PBAnaly.UI this.dataGridView1.CellPainting += DataGridView1_CellPainting; + if (GlobalData.GetProperty("Language") == "Chinese") + { + SetLanguage("zh-CN"); + } + else + { + SetLanguage("en-US"); + } + } + #region 中英文切换 + ResourceManager resourceManager; + private void SetLanguage(string cultureCode) + { + resourceManager = new ResourceManager("PBAnaly.Properties.Resources", typeof(MainForm).Assembly); + + // 设置当前线程的文化信息 + Thread.CurrentThread.CurrentUICulture = new CultureInfo(cultureCode); + + // 更新所有控件的文本 + UpdateControlsText(); + } + + // 更新所有控件的文本 + private void UpdateControlsText() + { + //// 遍历所有控件并更新文本 + foreach (Control control in this.Controls) + { + UpdateControlText(control); + } + } + // 更新单个控件的文本 + private void UpdateControlText(Control control) + { + //// 直接通过控件的 Name 属性获取资源字符串 + string resourceText = resourceManager.GetString(control.Name); + if (!string.IsNullOrEmpty(resourceText)) + { + control.Text = resourceText; + } + + // 如果控件包含子控件,则递归更新子控件 + foreach (Control subControl in control.Controls) + { + UpdateControlText(subControl); + } + } + + #endregion public void Draw() { diff --git a/src/PBAnaly/UI/BioanalyImagePanel.Designer.cs b/src/PBAnaly/UI/BioanalyImagePanel.Designer.cs index 3a761ab..6ee6e46 100644 --- a/src/PBAnaly/UI/BioanalyImagePanel.Designer.cs +++ b/src/PBAnaly/UI/BioanalyImagePanel.Designer.cs @@ -33,7 +33,7 @@ this.panel1 = new AntdUI.Panel(); this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); this.panel2 = new AntdUI.Panel(); - this.label2 = new AntdUI.Label(); + this.label2_mode = new AntdUI.Label(); this.cbb_mode = new System.Windows.Forms.ComboBox(); this.lb_imageIndex = new AntdUI.Label(); this.cb_scientific = new AntdUI.Checkbox(); @@ -120,7 +120,7 @@ // // panel2 // - this.panel2.Controls.Add(this.label2); + this.panel2.Controls.Add(this.label2_mode); this.panel2.Controls.Add(this.cbb_mode); this.panel2.Controls.Add(this.lb_imageIndex); this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; @@ -131,15 +131,15 @@ this.panel2.TabIndex = 0; this.panel2.Text = "panel2"; // - // label2 + // label2_mode // - this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + this.label2_mode.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left))); - this.label2.Location = new System.Drawing.Point(36, 0); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(36, 23); - this.label2.TabIndex = 1; - this.label2.Text = "模式:"; + this.label2_mode.Location = new System.Drawing.Point(36, 0); + this.label2_mode.Name = "label2_mode"; + this.label2_mode.Size = new System.Drawing.Size(36, 23); + this.label2_mode.TabIndex = 1; + this.label2_mode.Text = "模式:"; // // cbb_mode // @@ -445,6 +445,7 @@ this.lb_top_info.Size = new System.Drawing.Size(60, 22); this.lb_top_info.TabIndex = 4; this.lb_top_info.Text = "Trans-fluorescence"; + this.lb_top_info.TextAlign = System.Drawing.ContentAlignment.TopLeft; // // BioanalyImagePanel // @@ -498,7 +499,7 @@ public System.Windows.Forms.TableLayoutPanel tlp_right_panel; public System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; public AntdUI.Checkbox cb_scientific; - private AntdUI.Label label2; + private AntdUI.Label label2_mode; public AntdUI.Label lb_imageIndex; public System.Windows.Forms.ContextMenuStrip ctms_strop; private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; diff --git a/src/PBAnaly/UI/BioanalyImagePanel.cs b/src/PBAnaly/UI/BioanalyImagePanel.cs index ca345b3..889c0dc 100644 --- a/src/PBAnaly/UI/BioanalyImagePanel.cs +++ b/src/PBAnaly/UI/BioanalyImagePanel.cs @@ -1,4 +1,5 @@ -using PBAnaly.Module; +using PBAnaly.Assist; +using PBAnaly.Module; using SixLabors.ImageSharp; using SixLabors.ImageSharp.PixelFormats; using System; @@ -7,8 +8,11 @@ using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; +using System.Globalization; using System.Linq; +using System.Resources; using System.Text; +using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; @@ -45,8 +49,57 @@ namespace PBAnaly.UI CenterPictureBox(); image_pl.MouseWheel += Image_pl_MouseWheel; + + if (GlobalData.GetProperty("Language") == "Chinese") + { + SetLanguage("zh-CN"); + } + else + { + SetLanguage("en-US"); + } } + #region 中英文切换 + ResourceManager resourceManager; + private void SetLanguage(string cultureCode) + { + resourceManager = new ResourceManager("PBAnaly.Properties.Resources", typeof(MainForm).Assembly); + + // 设置当前线程的文化信息 + Thread.CurrentThread.CurrentUICulture = new CultureInfo(cultureCode); + + // 更新所有控件的文本 + UpdateControlsText(); + } + + // 更新所有控件的文本 + private void UpdateControlsText() + { + //// 遍历所有控件并更新文本 + foreach (Control control in this.Controls) + { + UpdateControlText(control); + } + } + // 更新单个控件的文本 + private void UpdateControlText(Control control) + { + //// 直接通过控件的 Name 属性获取资源字符串 + string resourceText = resourceManager.GetString(control.Name); + if (!string.IsNullOrEmpty(resourceText)) + { + control.Text = resourceText; + } + + // 如果控件包含子控件,则递归更新子控件 + foreach (Control subControl in control.Controls) + { + UpdateControlText(subControl); + } + } + + #endregion #region 对外方法 diff --git a/src/PBAnaly/UI/LanesImagePaletteForm.cs b/src/PBAnaly/UI/LanesImagePaletteForm.cs index 6f17814..10c12ab 100644 --- a/src/PBAnaly/UI/LanesImagePaletteForm.cs +++ b/src/PBAnaly/UI/LanesImagePaletteForm.cs @@ -9,6 +9,10 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; +using System.Globalization; +using System.Resources; +using System.Threading; +using PBAnaly.Assist; namespace PBAnaly.UI { @@ -18,8 +22,56 @@ namespace PBAnaly.UI public LanesImagePaletteForm() { InitializeComponent(); + + if (GlobalData.GetProperty("Language") == "Chinese") + { + SetLanguage("zh-CN"); + } + else + { + SetLanguage("en-US"); + } } - + #region 中英文切换 + ResourceManager resourceManager; + private void SetLanguage(string cultureCode) + { + resourceManager = new ResourceManager("PBAnaly.Properties.Resources", typeof(MainForm).Assembly); + + // 设置当前线程的文化信息 + Thread.CurrentThread.CurrentUICulture = new CultureInfo(cultureCode); + + // 更新所有控件的文本 + UpdateControlsText(); + } + + // 更新所有控件的文本 + private void UpdateControlsText() + { + //// 遍历所有控件并更新文本 + foreach (Control control in this.Controls) + { + UpdateControlText(control); + } + } + // 更新单个控件的文本 + private void UpdateControlText(Control control) + { + //// 直接通过控件的 Name 属性获取资源字符串 + string resourceText = resourceManager.GetString(control.Name); + if (!string.IsNullOrEmpty(resourceText)) + { + control.Text = resourceText; + } + + // 如果控件包含子控件,则递归更新子控件 + foreach (Control subControl in control.Controls) + { + UpdateControlText(subControl); + } + } + + #endregion } } diff --git a/src/PBAnaly/UI/MultiImageForm.Designer.cs b/src/PBAnaly/UI/MultiImageForm.Designer.cs index 979d963..da195df 100644 --- a/src/PBAnaly/UI/MultiImageForm.Designer.cs +++ b/src/PBAnaly/UI/MultiImageForm.Designer.cs @@ -28,7 +28,7 @@ /// private void InitializeComponent() { - this.label1 = new AntdUI.Label(); + this.label_path = new AntdUI.Label(); this.pb_image = new System.Windows.Forms.PictureBox(); this.ab_one = new ReaLTaiizor.Controls.AirButton(); this.ab_last = new ReaLTaiizor.Controls.AirButton(); @@ -42,19 +42,21 @@ ((System.ComponentModel.ISupportInitialize)(this.pb_image)).BeginInit(); this.SuspendLayout(); // - // label1 + // label_path // - this.label1.Location = new System.Drawing.Point(12, 12); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(75, 23); - this.label1.TabIndex = 0; - this.label1.Text = "路径:"; + this.label_path.Location = new System.Drawing.Point(9, 10); + this.label_path.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.label_path.Name = "label_path"; + this.label_path.Size = new System.Drawing.Size(56, 18); + this.label_path.TabIndex = 0; + this.label_path.Text = "路径:"; // // pb_image // - this.pb_image.Location = new System.Drawing.Point(24, 67); + this.pb_image.Location = new System.Drawing.Point(18, 54); + this.pb_image.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); this.pb_image.Name = "pb_image"; - this.pb_image.Size = new System.Drawing.Size(752, 447); + this.pb_image.Size = new System.Drawing.Size(564, 358); this.pb_image.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; this.pb_image.TabIndex = 2; this.pb_image.TabStop = false; @@ -65,10 +67,11 @@ this.ab_one.Customization = "7e3t//Ly8v/r6+v/5ubm/+vr6//f39//p6en/zw8PP8UFBT/gICA/w=="; this.ab_one.Font = new System.Drawing.Font("Segoe UI", 9F); this.ab_one.Image = null; - this.ab_one.Location = new System.Drawing.Point(24, 530); + this.ab_one.Location = new System.Drawing.Point(18, 424); + this.ab_one.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); this.ab_one.Name = "ab_one"; this.ab_one.NoRounding = false; - this.ab_one.Size = new System.Drawing.Size(81, 40); + this.ab_one.Size = new System.Drawing.Size(61, 32); this.ab_one.TabIndex = 3; this.ab_one.Text = "第一幅"; this.ab_one.Transparent = false; @@ -80,10 +83,11 @@ this.ab_last.Customization = "7e3t//Ly8v/r6+v/5ubm/+vr6//f39//p6en/zw8PP8UFBT/gICA/w=="; this.ab_last.Font = new System.Drawing.Font("Segoe UI", 9F); this.ab_last.Image = null; - this.ab_last.Location = new System.Drawing.Point(142, 530); + this.ab_last.Location = new System.Drawing.Point(106, 424); + this.ab_last.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); this.ab_last.Name = "ab_last"; this.ab_last.NoRounding = false; - this.ab_last.Size = new System.Drawing.Size(81, 40); + this.ab_last.Size = new System.Drawing.Size(61, 32); this.ab_last.TabIndex = 4; this.ab_last.Text = "上一幅"; this.ab_last.Transparent = false; @@ -95,10 +99,11 @@ this.ab_next.Customization = "7e3t//Ly8v/r6+v/5ubm/+vr6//f39//p6en/zw8PP8UFBT/gICA/w=="; this.ab_next.Font = new System.Drawing.Font("Segoe UI", 9F); this.ab_next.Image = null; - this.ab_next.Location = new System.Drawing.Point(337, 530); + this.ab_next.Location = new System.Drawing.Point(253, 424); + this.ab_next.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); this.ab_next.Name = "ab_next"; this.ab_next.NoRounding = false; - this.ab_next.Size = new System.Drawing.Size(81, 40); + this.ab_next.Size = new System.Drawing.Size(61, 32); this.ab_next.TabIndex = 5; this.ab_next.Text = "下一幅"; this.ab_next.Transparent = false; @@ -110,10 +115,11 @@ this.ab_atLast.Customization = "7e3t//Ly8v/r6+v/5ubm/+vr6//f39//p6en/zw8PP8UFBT/gICA/w=="; this.ab_atLast.Font = new System.Drawing.Font("Segoe UI", 9F); this.ab_atLast.Image = null; - this.ab_atLast.Location = new System.Drawing.Point(445, 530); + this.ab_atLast.Location = new System.Drawing.Point(334, 424); + this.ab_atLast.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); this.ab_atLast.Name = "ab_atLast"; this.ab_atLast.NoRounding = false; - this.ab_atLast.Size = new System.Drawing.Size(81, 40); + this.ab_atLast.Size = new System.Drawing.Size(61, 32); this.ab_atLast.TabIndex = 6; this.ab_atLast.Text = "最后"; this.ab_atLast.Transparent = false; @@ -121,9 +127,10 @@ // // lb_lable // - this.lb_lable.Location = new System.Drawing.Point(257, 530); + this.lb_lable.Location = new System.Drawing.Point(193, 424); + this.lb_lable.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); this.lb_lable.Name = "lb_lable"; - this.lb_lable.Size = new System.Drawing.Size(64, 42); + this.lb_lable.Size = new System.Drawing.Size(48, 34); this.lb_lable.TabIndex = 7; this.lb_lable.Text = "0/0"; // @@ -133,10 +140,11 @@ this.ab_saveTif.Customization = "7e3t//Ly8v/r6+v/5ubm/+vr6//f39//p6en/zw8PP8UFBT/gICA/w=="; this.ab_saveTif.Font = new System.Drawing.Font("Segoe UI", 9F); this.ab_saveTif.Image = null; - this.ab_saveTif.Location = new System.Drawing.Point(355, 590); + this.ab_saveTif.Location = new System.Drawing.Point(266, 472); + this.ab_saveTif.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); this.ab_saveTif.Name = "ab_saveTif"; this.ab_saveTif.NoRounding = false; - this.ab_saveTif.Size = new System.Drawing.Size(123, 40); + this.ab_saveTif.Size = new System.Drawing.Size(92, 32); this.ab_saveTif.TabIndex = 8; this.ab_saveTif.Text = "另存为单帧TIF"; this.ab_saveTif.Transparent = false; @@ -148,10 +156,11 @@ this.ab_close.Customization = "7e3t//Ly8v/r6+v/5ubm/+vr6//f39//p6en/zw8PP8UFBT/gICA/w=="; this.ab_close.Font = new System.Drawing.Font("Segoe UI", 9F); this.ab_close.Image = null; - this.ab_close.Location = new System.Drawing.Point(511, 590); + this.ab_close.Location = new System.Drawing.Point(383, 472); + this.ab_close.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); this.ab_close.Name = "ab_close"; this.ab_close.NoRounding = false; - this.ab_close.Size = new System.Drawing.Size(123, 40); + this.ab_close.Size = new System.Drawing.Size(92, 32); this.ab_close.TabIndex = 9; this.ab_close.Text = "关闭"; this.ab_close.Transparent = false; @@ -163,10 +172,11 @@ this.ab_open_cur_tif.Customization = "7e3t//Ly8v/r6+v/5ubm/+vr6//f39//p6en/zw8PP8UFBT/gICA/w=="; this.ab_open_cur_tif.Font = new System.Drawing.Font("Segoe UI", 9F); this.ab_open_cur_tif.Image = null; - this.ab_open_cur_tif.Location = new System.Drawing.Point(665, 590); + this.ab_open_cur_tif.Location = new System.Drawing.Point(499, 472); + this.ab_open_cur_tif.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); this.ab_open_cur_tif.Name = "ab_open_cur_tif"; this.ab_open_cur_tif.NoRounding = false; - this.ab_open_cur_tif.Size = new System.Drawing.Size(123, 40); + this.ab_open_cur_tif.Size = new System.Drawing.Size(92, 32); this.ab_open_cur_tif.TabIndex = 10; this.ab_open_cur_tif.Text = "打开当前帧"; this.ab_open_cur_tif.Transparent = false; @@ -176,17 +186,18 @@ // this.cb_path.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cb_path.FormattingEnabled = true; - this.cb_path.Location = new System.Drawing.Point(93, 12); + this.cb_path.Location = new System.Drawing.Point(70, 10); + this.cb_path.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); this.cb_path.Name = "cb_path"; - this.cb_path.Size = new System.Drawing.Size(632, 23); + this.cb_path.Size = new System.Drawing.Size(475, 20); this.cb_path.TabIndex = 11; // // MultiImageForm // - this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F); + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackColor = System.Drawing.Color.LightGray; - this.ClientSize = new System.Drawing.Size(818, 642); + this.ClientSize = new System.Drawing.Size(614, 514); this.Controls.Add(this.cb_path); this.Controls.Add(this.ab_open_cur_tif); this.Controls.Add(this.ab_close); @@ -197,8 +208,9 @@ this.Controls.Add(this.ab_last); this.Controls.Add(this.ab_one); this.Controls.Add(this.pb_image); - this.Controls.Add(this.label1); + this.Controls.Add(this.label_path); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow; + this.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); this.Name = "MultiImageForm"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "序列图像管理"; @@ -210,7 +222,7 @@ #endregion - private AntdUI.Label label1; + private AntdUI.Label label_path; private System.Windows.Forms.PictureBox pb_image; private ReaLTaiizor.Controls.AirButton ab_one; private ReaLTaiizor.Controls.AirButton ab_last; diff --git a/src/PBAnaly/UI/MultiImageForm.cs b/src/PBAnaly/UI/MultiImageForm.cs index f8df66b..64678e3 100644 --- a/src/PBAnaly/UI/MultiImageForm.cs +++ b/src/PBAnaly/UI/MultiImageForm.cs @@ -1,12 +1,16 @@ using AntdUI; using ImageMagick; using OpenCvSharp.Flann; +using PBAnaly.Assist; using PBAnaly.Module; using SixLabors.ImageSharp; using SixLabors.ImageSharp.PixelFormats; using System; using System.Collections.Generic; +using System.Globalization; using System.IO; +using System.Resources; +using System.Threading; using System.Windows.Forms; namespace PBAnaly.UI @@ -24,7 +28,60 @@ namespace PBAnaly.UI cb_path.Items.Add(path); cb_path.SelectedIndex = 0; ReadTiff(); + + if (GlobalData.GetProperty("Language") == "Chinese") + { + SetLanguage("zh-CN"); + } + else + { + SetLanguage("en-US"); + } } + + + #region 中英文切换 + ResourceManager resourceManager; + private void SetLanguage(string cultureCode) + { + resourceManager = new ResourceManager("PBAnaly.Properties.Resources", typeof(MainForm).Assembly); + + // 设置当前线程的文化信息 + Thread.CurrentThread.CurrentUICulture = new CultureInfo(cultureCode); + + // 更新所有控件的文本 + UpdateControlsText(); + } + + // 更新所有控件的文本 + private void UpdateControlsText() + { + //// 遍历所有控件并更新文本 + foreach (Control control in this.Controls) + { + UpdateControlText(control); + } + } + // 更新单个控件的文本 + private void UpdateControlText(Control control) + { + //// 直接通过控件的 Name 属性获取资源字符串 + string resourceText = resourceManager.GetString(control.Name); + if (!string.IsNullOrEmpty(resourceText)) + { + control.Text = resourceText; + } + + // 如果控件包含子控件,则递归更新子控件 + foreach (Control subControl in control.Controls) + { + UpdateControlText(subControl); + } + } + + #endregion + + private void ReadTiff() { imageList.Clear(); diff --git a/src/PBAnaly/UI/SizeForm.cs b/src/PBAnaly/UI/SizeForm.cs index cde08d0..dffae20 100644 --- a/src/PBAnaly/UI/SizeForm.cs +++ b/src/PBAnaly/UI/SizeForm.cs @@ -1,10 +1,14 @@ -using System; +using PBAnaly.Assist; +using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; +using System.Globalization; using System.Linq; +using System.Resources; using System.Text; +using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; @@ -21,6 +25,16 @@ namespace PBAnaly.UI private void btn_ok_Click(object sender, EventArgs e) { + string msg = ""; + if (GlobalData.GetProperty("Language") == "Chinese") + { + SetLanguage("zh-CN"); + msg = "行值不小于列数"; + } + else + { + SetLanguage("en-US"); + } row = int.Parse(btb_row.Text); col = int.Parse(btb_col.Text); @@ -37,5 +51,46 @@ namespace PBAnaly.UI { this.DialogResult = DialogResult.Cancel; } + #region 中英文切换 + ResourceManager resourceManager; + private void SetLanguage(string cultureCode) + { + resourceManager = new ResourceManager("PBAnaly.Properties.Resources", typeof(MainForm).Assembly); + + // 设置当前线程的文化信息 + Thread.CurrentThread.CurrentUICulture = new CultureInfo(cultureCode); + + // 更新所有控件的文本 + UpdateControlsText(); + } + + // 更新所有控件的文本 + private void UpdateControlsText() + { + //// 遍历所有控件并更新文本 + foreach (Control control in this.Controls) + { + UpdateControlText(control); + } + } + // 更新单个控件的文本 + private void UpdateControlText(Control control) + { + //// 直接通过控件的 Name 属性获取资源字符串 + string resourceText = resourceManager.GetString(control.Name); + if (!string.IsNullOrEmpty(resourceText)) + { + control.Text = resourceText; + } + + // 如果控件包含子控件,则递归更新子控件 + foreach (Control subControl in control.Controls) + { + UpdateControlText(subControl); + } + } + + #endregion + } } diff --git a/src/PBAnaly/UI/SystemSettingForm.Designer.cs b/src/PBAnaly/UI/SystemSettingForm.Designer.cs index 95fe6db..085d09d 100644 --- a/src/PBAnaly/UI/SystemSettingForm.Designer.cs +++ b/src/PBAnaly/UI/SystemSettingForm.Designer.cs @@ -29,19 +29,28 @@ private void InitializeComponent() { this.panel1 = new System.Windows.Forms.Panel(); - this.panel_mode = new System.Windows.Forms.Panel(); - this.tabMain = new System.Windows.Forms.TabControl(); - this.tab_UserManage = new System.Windows.Forms.TabPage(); - this.pnlMainMenu = new System.Windows.Forms.Panel(); + this.tab_Main = new System.Windows.Forms.TabControl(); + this.tab_UserManage1 = new System.Windows.Forms.TabPage(); this.label4 = new System.Windows.Forms.Label(); this.btn_Min = new System.Windows.Forms.Button(); this.btn_Max = new System.Windows.Forms.Button(); this.btn_Close = new System.Windows.Forms.Button(); - this.btn_ReadManage = new System.Windows.Forms.Button(); + this.pnl_MainMenu = new System.Windows.Forms.Panel(); + this.btn_SystemSetting = new System.Windows.Forms.Button(); + this.btn_UserManager = new System.Windows.Forms.Button(); + this.panel4 = new System.Windows.Forms.Panel(); + this.tab_SystemSetting = new System.Windows.Forms.TabPage(); + this.panel_System = new System.Windows.Forms.Panel(); + this.panel2 = new System.Windows.Forms.Panel(); + this.cbx_System_Language = new System.Windows.Forms.ComboBox(); + this.label_Language = new System.Windows.Forms.Label(); + this.btn_save_ZH_US = new System.Windows.Forms.Button(); this.panel1.SuspendLayout(); - this.panel_mode.SuspendLayout(); - this.tabMain.SuspendLayout(); - this.pnlMainMenu.SuspendLayout(); + this.tab_Main.SuspendLayout(); + this.pnl_MainMenu.SuspendLayout(); + this.tab_SystemSetting.SuspendLayout(); + this.panel_System.SuspendLayout(); + this.panel2.SuspendLayout(); this.SuspendLayout(); // // panel1 @@ -50,58 +59,35 @@ | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.panel1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50))))); - this.panel1.Controls.Add(this.panel_mode); - this.panel1.Controls.Add(this.pnlMainMenu); + this.panel1.Controls.Add(this.tab_Main); + this.panel1.Controls.Add(this.pnl_MainMenu); this.panel1.Location = new System.Drawing.Point(-1, 31); this.panel1.Name = "panel1"; this.panel1.Size = new System.Drawing.Size(1159, 642); this.panel1.TabIndex = 455; // - // panel_mode + // tab_Main // - this.panel_mode.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.panel_mode.BackColor = System.Drawing.SystemColors.Control; - this.panel_mode.Controls.Add(this.tabMain); - this.panel_mode.Location = new System.Drawing.Point(59, 0); - this.panel_mode.Name = "panel_mode"; - this.panel_mode.Size = new System.Drawing.Size(1098, 639); - this.panel_mode.TabIndex = 444; + this.tab_Main.Alignment = System.Windows.Forms.TabAlignment.Left; + this.tab_Main.Controls.Add(this.tab_SystemSetting); + this.tab_Main.Controls.Add(this.tab_UserManage1); + this.tab_Main.Location = new System.Drawing.Point(174, 3); + this.tab_Main.Multiline = true; + this.tab_Main.Name = "tab_Main"; + this.tab_Main.SelectedIndex = 0; + this.tab_Main.Size = new System.Drawing.Size(982, 636); + this.tab_Main.TabIndex = 0; // - // tabMain + // tab_UserManage1 // - this.tabMain.Alignment = System.Windows.Forms.TabAlignment.Left; - this.tabMain.Controls.Add(this.tab_UserManage); - this.tabMain.Dock = System.Windows.Forms.DockStyle.Fill; - this.tabMain.Location = new System.Drawing.Point(0, 0); - this.tabMain.Multiline = true; - this.tabMain.Name = "tabMain"; - this.tabMain.SelectedIndex = 0; - this.tabMain.Size = new System.Drawing.Size(1098, 639); - this.tabMain.TabIndex = 0; - // - // tab_UserManage - // - this.tab_UserManage.BackColor = System.Drawing.Color.White; - this.tab_UserManage.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; - this.tab_UserManage.Location = new System.Drawing.Point(22, 4); - this.tab_UserManage.Name = "tab_UserManage"; - this.tab_UserManage.Padding = new System.Windows.Forms.Padding(3); - this.tab_UserManage.Size = new System.Drawing.Size(1072, 631); - this.tab_UserManage.TabIndex = 0; - this.tab_UserManage.Text = "用户管理"; - // - // pnlMainMenu - // - this.pnlMainMenu.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left))); - this.pnlMainMenu.BackColor = System.Drawing.Color.White; - this.pnlMainMenu.Controls.Add(this.btn_ReadManage); - this.pnlMainMenu.Location = new System.Drawing.Point(3, -3); - this.pnlMainMenu.Name = "pnlMainMenu"; - this.pnlMainMenu.Size = new System.Drawing.Size(77, 642); - this.pnlMainMenu.TabIndex = 443; + this.tab_UserManage1.BackColor = System.Drawing.Color.White; + this.tab_UserManage1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.tab_UserManage1.Location = new System.Drawing.Point(22, 4); + this.tab_UserManage1.Name = "tab_UserManage1"; + this.tab_UserManage1.Padding = new System.Windows.Forms.Padding(3); + this.tab_UserManage1.Size = new System.Drawing.Size(956, 628); + this.tab_UserManage1.TabIndex = 0; + this.tab_UserManage1.Text = "用户管理"; // // label4 // @@ -110,9 +96,9 @@ this.label4.ForeColor = System.Drawing.Color.White; this.label4.Location = new System.Drawing.Point(12, 3); this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(81, 25); + this.label4.Size = new System.Drawing.Size(77, 25); this.label4.TabIndex = 456; - this.label4.Text = "register"; + this.label4.Text = "System"; // // btn_Min // @@ -159,18 +145,128 @@ this.btn_Close.UseVisualStyleBackColor = false; this.btn_Close.Click += new System.EventHandler(this.btn_Close_Click); // - // btn_ReadManage + // pnl_MainMenu // - this.btn_ReadManage.BackColor = System.Drawing.Color.White; - this.btn_ReadManage.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.btn_ReadManage.Font = new System.Drawing.Font("宋体", 9F); - this.btn_ReadManage.Image = global::PBAnaly.Properties.Resources.登录_亮; - this.btn_ReadManage.Location = new System.Drawing.Point(2, 3); - this.btn_ReadManage.Name = "btn_ReadManage"; - this.btn_ReadManage.Size = new System.Drawing.Size(75, 86); - this.btn_ReadManage.TabIndex = 3; - this.btn_ReadManage.TextAlign = System.Drawing.ContentAlignment.BottomCenter; - this.btn_ReadManage.UseVisualStyleBackColor = false; + this.pnl_MainMenu.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.pnl_MainMenu.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); + this.pnl_MainMenu.Controls.Add(this.btn_SystemSetting); + this.pnl_MainMenu.Controls.Add(this.btn_UserManager); + this.pnl_MainMenu.Controls.Add(this.panel4); + this.pnl_MainMenu.Location = new System.Drawing.Point(5, 3); + this.pnl_MainMenu.Name = "pnl_MainMenu"; + this.pnl_MainMenu.Size = new System.Drawing.Size(191, 636); + this.pnl_MainMenu.TabIndex = 445; + // + // btn_SystemSetting + // + this.btn_SystemSetting.BackColor = System.Drawing.SystemColors.Control; + this.btn_SystemSetting.FlatAppearance.BorderColor = System.Drawing.Color.Gold; + this.btn_SystemSetting.FlatAppearance.MouseDownBackColor = System.Drawing.Color.MediumAquamarine; + this.btn_SystemSetting.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btn_SystemSetting.Font = new System.Drawing.Font("微软雅黑", 16F, System.Drawing.FontStyle.Bold); + this.btn_SystemSetting.Location = new System.Drawing.Point(1, 0); + this.btn_SystemSetting.Name = "btn_SystemSetting"; + this.btn_SystemSetting.Size = new System.Drawing.Size(184, 50); + this.btn_SystemSetting.TabIndex = 1; + this.btn_SystemSetting.Text = "系统设置"; + this.btn_SystemSetting.UseVisualStyleBackColor = false; + this.btn_SystemSetting.Click += new System.EventHandler(this.btn_SystemSetting_Click); + // + // btn_UserManager + // + this.btn_UserManager.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(56)))), ((int)(((byte)(83))))); + this.btn_UserManager.FlatAppearance.BorderColor = System.Drawing.Color.Gold; + this.btn_UserManager.FlatAppearance.MouseDownBackColor = System.Drawing.Color.MediumAquamarine; + this.btn_UserManager.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btn_UserManager.Font = new System.Drawing.Font("微软雅黑", 16F, System.Drawing.FontStyle.Bold); + this.btn_UserManager.ForeColor = System.Drawing.Color.White; + this.btn_UserManager.Location = new System.Drawing.Point(1, 49); + this.btn_UserManager.Name = "btn_UserManager"; + this.btn_UserManager.Size = new System.Drawing.Size(184, 50); + this.btn_UserManager.TabIndex = 0; + this.btn_UserManager.Text = "用户管理"; + this.btn_UserManager.UseVisualStyleBackColor = false; + this.btn_UserManager.Click += new System.EventHandler(this.btn_UserManager_Click); + // + // panel4 + // + this.panel4.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.panel4.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(56)))), ((int)(((byte)(83))))); + this.panel4.Location = new System.Drawing.Point(185, 0); + this.panel4.Name = "panel4"; + this.panel4.Size = new System.Drawing.Size(3, 636); + this.panel4.TabIndex = 7; + // + // tab_SystemSetting + // + this.tab_SystemSetting.BackColor = System.Drawing.Color.White; + this.tab_SystemSetting.Controls.Add(this.panel_System); + this.tab_SystemSetting.Location = new System.Drawing.Point(22, 4); + this.tab_SystemSetting.Name = "tab_SystemSetting"; + this.tab_SystemSetting.Padding = new System.Windows.Forms.Padding(3); + this.tab_SystemSetting.Size = new System.Drawing.Size(956, 628); + this.tab_SystemSetting.TabIndex = 1; + this.tab_SystemSetting.Text = "系统设置"; + // + // panel_System + // + this.panel_System.Controls.Add(this.panel2); + this.panel_System.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel_System.Location = new System.Drawing.Point(3, 3); + this.panel_System.Name = "panel_System"; + this.panel_System.Size = new System.Drawing.Size(950, 622); + this.panel_System.TabIndex = 1; + // + // panel2 + // + this.panel2.Controls.Add(this.cbx_System_Language); + this.panel2.Controls.Add(this.label_Language); + this.panel2.Controls.Add(this.btn_save_ZH_US); + this.panel2.Location = new System.Drawing.Point(2, 3); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(394, 618); + this.panel2.TabIndex = 512; + // + // cbx_System_Language + // + this.cbx_System_Language.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cbx_System_Language.Font = new System.Drawing.Font("宋体", 15F); + this.cbx_System_Language.FormattingEnabled = true; + this.cbx_System_Language.Items.AddRange(new object[] { + "English", + "简体中文"}); + this.cbx_System_Language.Location = new System.Drawing.Point(106, 17); + this.cbx_System_Language.Name = "cbx_System_Language"; + this.cbx_System_Language.Size = new System.Drawing.Size(249, 28); + this.cbx_System_Language.TabIndex = 513; + // + // label_Language + // + this.label_Language.AutoSize = true; + this.label_Language.Font = new System.Drawing.Font("宋体", 13F); + this.label_Language.Location = new System.Drawing.Point(15, 22); + this.label_Language.Name = "label_Language"; + this.label_Language.Size = new System.Drawing.Size(53, 18); + this.label_Language.TabIndex = 512; + this.label_Language.Text = "语言:"; + // + // btn_save_ZH_US + // + this.btn_save_ZH_US.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(32)))), ((int)(((byte)(96))))); + this.btn_save_ZH_US.FlatAppearance.BorderSize = 0; + this.btn_save_ZH_US.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btn_save_ZH_US.Font = new System.Drawing.Font("宋体", 13F, System.Drawing.FontStyle.Bold); + this.btn_save_ZH_US.ForeColor = System.Drawing.Color.White; + this.btn_save_ZH_US.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.btn_save_ZH_US.Location = new System.Drawing.Point(276, 562); + this.btn_save_ZH_US.Name = "btn_save_ZH_US"; + this.btn_save_ZH_US.Size = new System.Drawing.Size(101, 38); + this.btn_save_ZH_US.TabIndex = 511; + this.btn_save_ZH_US.Text = "保存"; + this.btn_save_ZH_US.UseVisualStyleBackColor = false; + this.btn_save_ZH_US.Click += new System.EventHandler(this.btn_save_ZH_US_Click); // // SystemSettingForm // @@ -188,9 +284,12 @@ this.Text = "SystemSettingForm"; this.Load += new System.EventHandler(this.SystemSettingForm_Load); this.panel1.ResumeLayout(false); - this.panel_mode.ResumeLayout(false); - this.tabMain.ResumeLayout(false); - this.pnlMainMenu.ResumeLayout(false); + this.tab_Main.ResumeLayout(false); + this.pnl_MainMenu.ResumeLayout(false); + this.tab_SystemSetting.ResumeLayout(false); + this.panel_System.ResumeLayout(false); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); this.ResumeLayout(false); this.PerformLayout(); @@ -203,10 +302,17 @@ private System.Windows.Forms.Button btn_Close; private System.Windows.Forms.Button btn_Max; private System.Windows.Forms.Button btn_Min; - private System.Windows.Forms.Panel pnlMainMenu; - private System.Windows.Forms.Button btn_ReadManage; - private System.Windows.Forms.Panel panel_mode; - private System.Windows.Forms.TabControl tabMain; - private System.Windows.Forms.TabPage tab_UserManage; + private System.Windows.Forms.TabControl tab_Main; + private System.Windows.Forms.TabPage tab_UserManage1; + private System.Windows.Forms.Panel pnl_MainMenu; + private System.Windows.Forms.Button btn_SystemSetting; + private System.Windows.Forms.Button btn_UserManager; + private System.Windows.Forms.Panel panel4; + private System.Windows.Forms.TabPage tab_SystemSetting; + private System.Windows.Forms.Panel panel_System; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.ComboBox cbx_System_Language; + private System.Windows.Forms.Label label_Language; + private System.Windows.Forms.Button btn_save_ZH_US; } } \ No newline at end of file diff --git a/src/PBAnaly/UI/SystemSettingForm.cs b/src/PBAnaly/UI/SystemSettingForm.cs index b0d1633..59f1a3e 100644 --- a/src/PBAnaly/UI/SystemSettingForm.cs +++ b/src/PBAnaly/UI/SystemSettingForm.cs @@ -1,13 +1,18 @@ -using PBAnaly.LoginCommon; +using PBAnaly.Assist; +using PBAnaly.LoginCommon; +using ScottPlot.Colormaps; using Sunny.UI.Win32; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; +using System.Globalization; using System.Linq; +using System.Resources; using System.Security.Cryptography; using System.Text; +using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; @@ -19,12 +24,23 @@ namespace PBAnaly.UI { InitializeComponent(); - pnlMainMenu.BringToFront(); + pnl_MainMenu.BringToFront(); // 设置窗体的启动位置为屏幕的中心 this.StartPosition = FormStartPosition.CenterScreen; this.Location = new System.Drawing.Point((Screen.PrimaryScreen.WorkingArea.Width - this.Width) / 2, (Screen.PrimaryScreen.WorkingArea.Height - this.Height) / 2); + + GlobalData.PropertyChanged += OnGlobalDataPropertyChanged; + + if (GlobalData.GetProperty("Language") == "Chinese") + { + SetLanguage("zh-CN"); + } + else + { + SetLanguage("en-US"); + } } UserManageForm UserForm; @@ -108,18 +124,18 @@ namespace PBAnaly.UI } #endregion - private void btn_Close_Click(object sender, EventArgs e) - { - this.Close(); - } + private void SystemSettingForm_Load(object sender, EventArgs e) { + //加载系统参数 + LoadSystemParam(); + UserForm = new UserManageForm(); UserForm.Dock = DockStyle.Fill; UserForm.Location = new Point(0, 0); UserForm.TopLevel = false; - tab_UserManage.Controls.Add(UserForm); + tab_UserManage1.Controls.Add(UserForm); UserForm.InitUser(); UserForm.Show(); @@ -127,13 +143,186 @@ namespace PBAnaly.UI { if (UserManage.LogionUser.Role == UserRole.SuperAdministrator) { - tab_UserManage.Parent = tabMain; + tab_UserManage1.Parent = tab_Main; } else { - tab_UserManage.Parent = null; + tab_UserManage1.Parent = null; } } } + + #region OnGlobalDataPropertyChanged 处理全局属性更改事件 + /// + /// 处理全局属性更改事件 + /// + /// 发生变化的属性名 + /// 更改的属性值 + private void OnGlobalDataPropertyChanged(string name, string value) + { + switch (name) + { + case "Language": + if (GlobalData.GetProperty("Language") == "Chinese") + { + SetLanguage("zh-CN"); + } + else + { + SetLanguage("en-US"); + } + break; + default: + break; + } + } + + #endregion + + #region 中英文切换 + ResourceManager resourceManager; + private void SetLanguage(string cultureCode) + { + resourceManager = new ResourceManager("PBAnaly.Properties.Resources", typeof(MainForm).Assembly); + + // 设置当前线程的文化信息 + Thread.CurrentThread.CurrentUICulture = new CultureInfo(cultureCode); + + // 更新所有控件的文本 + UpdateControlsText(); + } + + // 更新所有控件的文本 + private void UpdateControlsText() + { + //// 遍历所有控件并更新文本 + foreach (Control control in this.Controls) + { + UpdateControlText(control); + } + } + // 更新单个控件的文本 + private void UpdateControlText(Control control) + { + //// 直接通过控件的 Name 属性获取资源字符串 + string resourceText = resourceManager.GetString(control.Name); + if (!string.IsNullOrEmpty(resourceText)) + { + control.Text = resourceText; + } + + // 如果控件包含子控件,则递归更新子控件 + foreach (Control subControl in control.Controls) + { + UpdateControlText(subControl); + } + } + + #endregion + + #region btn_Close_Click 窗口关闭按钮 + private void btn_Close_Click(object sender, EventArgs e) + { + this.Close(); + } + #endregion + + #region LoadSystemParam 加载系统参数 + /// + /// 加载系统参数 + /// + private void LoadSystemParam() + { + try + { + cbx_System_Language.Text = GlobalData.GetProperty("Language") == "English" ? "English" : "简体中文"; + } + catch (Exception) + { + + } + } + + #endregion + + #region btn_SystemSetting_Click 系统设置按钮 + private void btn_SystemSetting_Click(object sender, EventArgs e) + { + OperatingRecord.CreateRecord("系统设置按钮", "点击事件"); + this.tab_Main.SelectedIndex = 0; + + SetMainMenuButtonCilkeColor(((Button)sender).Name); + } + #endregion + + #region btn_UserManager_Click 用户管理按钮 + private void btn_UserManager_Click(object sender, EventArgs e) + { + OperatingRecord.CreateRecord("用户管理按钮", "点击事件"); + this.tab_Main.SelectedIndex = 1; + + SetMainMenuButtonCilkeColor(((Button)sender).Name); + } + #endregion + + #region SetMainMenuButtonCilkeColor 主菜单中按钮点击之后,设置按钮的前景色和背景色 + /// + /// 主菜单中按钮点击之后,设置按钮的前景色和背景色 + /// + /// 点击的按钮的名称 + private void SetMainMenuButtonCilkeColor(string strBtnName) + { + foreach (Control control in pnl_MainMenu.Controls) + { + if (control.Name == pnl_MainMenu.Name) + { + continue; + } + else if (control.Name == strBtnName) + { + control.BackColor = Color.White; + control.ForeColor = Color.Black; + } + else + { + control.BackColor = ColorTranslator.FromHtml("30, 56, 83"); + control.ForeColor = Color.White; + } + } + } + #endregion + + #region btn_save_ZH_US_Click 系统参数保存按钮 + private void btn_save_ZH_US_Click(object sender, EventArgs e) + { + try + { + if(GlobalData.GetProperty("Language") != cbx_System_Language.Text) + { + OperatingRecord.CreateRecord("系统参数保存按钮", + $"系统语言由{GlobalData.GetProperty("Language")}修改为:{cbx_System_Language.Text}"); + if (cbx_System_Language.Text == "English") + { + SetLanguage("en-US"); + GlobalData.SetProperty("Language", "English"); + } + else + { + SetLanguage("zh-CN"); + GlobalData.SetProperty("Language", "Chinese"); + } + } + + + MessageBox.Show("保存成功"); + + } + catch (Exception ex) + { + MessageBox.Show($"保存失败,原因:{ex.Message.ToString()}"); + } + + } + #endregion } }