From 753f60638a45c4af47026892225e8b4054bc354f Mon Sep 17 00:00:00 2001 From: moco Date: Mon, 30 Dec 2024 21:44:17 +0800 Subject: [PATCH 1/8] =?UTF-8?q?=E4=B8=B4=E6=97=B6=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E6=B3=B3=E9=81=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/PBAnaly/Module/LanesMannage.cs | 42 ++- src/PBAnaly/UI/AnalyzeDataForm.Designer.cs | 41 ++- .../UI/LanesImagePaletteForm.Designer.cs | 246 +++++++++--------- 3 files changed, 186 insertions(+), 143 deletions(-) diff --git a/src/PBAnaly/Module/LanesMannage.cs b/src/PBAnaly/Module/LanesMannage.cs index 3c601aa..14044c6 100644 --- a/src/PBAnaly/Module/LanesMannage.cs +++ b/src/PBAnaly/Module/LanesMannage.cs @@ -8,6 +8,7 @@ using System; using System.Collections.Generic; using System.IO; using System.Linq; +using System.Runtime.InteropServices; using System.Text; using System.Threading; using System.Threading.Tasks; @@ -36,6 +37,7 @@ namespace PBAnaly.Module private string path { get; set; } private string curImagePath; + PBBiology pbb = new PBBiology(); private Image image_L16; private byte[] image_byte; private byte[] image_8bit_byte; @@ -133,7 +135,32 @@ namespace PBAnaly.Module private void ImageAlg(band_infos aatb) { - + + //Mat image = new Mat(image_L16.Height,image_L16.Width,MatType.CV_8UC1); + //Marshal.Copy(image_8bit_byte,0,image.Data,image_8bit_byte.Length); + + //Mat whiteBackgroundImg = new Mat(); + //Scalar meanValue = Cv2.Mean(image); + //if (meanValue[0] < 10000) + //{ + // Cv2.BitwiseNot(image, whiteBackgroundImg); + //} + //else + //{ + // whiteBackgroundImg = image.Clone(); + //} + + //List proteinRect = new List(); + //// 算法使用的是8bit的图进行计算 + //unsafe + //{ + // fixed (byte* p = image_8bit_byte) + // { + // proteinRect = pbb.getProteinRectVC(p, (ushort)image_L16.Width, (ushort)image_L16.Height); + // } + + + //} } /// @@ -152,10 +179,14 @@ namespace PBAnaly.Module imagePanel.FormClosing += ImagePanel_FormClosing; imagePanel.FormClosed += ImagePanel_FormClosed; + + + imagePaletteForm.mb_findLanes.Click += Mb_findLanes_Click; + KeyboardListener.Register(OnKeyPressed); // 创建键盘钩子 } - + private bool ReadTiff() { @@ -304,6 +335,13 @@ namespace PBAnaly.Module } #endregion + #region imagePalette + private void Mb_findLanes_Click(object sender, EventArgs e) + { + + } + #endregion + private void OnKeyPressed(Keys key, bool ctrl, bool shift, bool alt) { diff --git a/src/PBAnaly/UI/AnalyzeDataForm.Designer.cs b/src/PBAnaly/UI/AnalyzeDataForm.Designer.cs index 0b138ea..7b781c5 100644 --- a/src/PBAnaly/UI/AnalyzeDataForm.Designer.cs +++ b/src/PBAnaly/UI/AnalyzeDataForm.Designer.cs @@ -65,7 +65,7 @@ this.文件ToolStripMenuItem1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(60)))), ((int)(((byte)(63)))), ((int)(((byte)(65))))); this.文件ToolStripMenuItem1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(220)))), ((int)(((byte)(220))))); this.文件ToolStripMenuItem1.Name = "文件ToolStripMenuItem1"; - this.文件ToolStripMenuItem1.Size = new System.Drawing.Size(53, 21); + this.文件ToolStripMenuItem1.Size = new System.Drawing.Size(44, 21); this.文件ToolStripMenuItem1.Text = "文件"; // // 选项ToolStripMenuItem1 @@ -73,7 +73,7 @@ this.选项ToolStripMenuItem1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(60)))), ((int)(((byte)(63)))), ((int)(((byte)(65))))); this.选项ToolStripMenuItem1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(220)))), ((int)(((byte)(220))))); this.选项ToolStripMenuItem1.Name = "选项ToolStripMenuItem1"; - this.选项ToolStripMenuItem1.Size = new System.Drawing.Size(53, 21); + this.选项ToolStripMenuItem1.Size = new System.Drawing.Size(44, 21); this.选项ToolStripMenuItem1.Text = "选项"; // // crownMenuStrip1 @@ -101,10 +101,10 @@ this.metroPanel1.Controls.Add(this.crownLabel1); this.metroPanel1.Dock = System.Windows.Forms.DockStyle.Fill; this.metroPanel1.IsDerivedStyle = true; - this.metroPanel1.Location = new System.Drawing.Point(0, 31); + 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(1577, 36); + this.metroPanel1.Size = new System.Drawing.Size(1223, 29); this.metroPanel1.Style = ReaLTaiizor.Enum.Metro.Style.Custom; this.metroPanel1.StyleManager = null; this.metroPanel1.TabIndex = 3; @@ -115,10 +115,9 @@ // this.crownLabel1.AutoSize = true; this.crownLabel1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(220)))), ((int)(((byte)(220))))); - this.crownLabel1.Location = new System.Drawing.Point(4, 11); - this.crownLabel1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.crownLabel1.Location = new System.Drawing.Point(3, 9); this.crownLabel1.Name = "crownLabel1"; - this.crownLabel1.Size = new System.Drawing.Size(37, 15); + this.crownLabel1.Size = new System.Drawing.Size(29, 12); this.crownLabel1.TabIndex = 0; this.crownLabel1.Text = "显示"; // @@ -130,14 +129,13 @@ this.tableLayoutPanel1.Controls.Add(this.metroPanel1, 0, 1); this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 2); this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel1.Location = new System.Drawing.Point(4, 30); - this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 24); this.tableLayoutPanel1.Name = "tableLayoutPanel1"; this.tableLayoutPanel1.RowCount = 3; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 31F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 36F)); + 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(1577, 1169); + this.tableLayoutPanel1.Size = new System.Drawing.Size(1223, 905); this.tableLayoutPanel1.TabIndex = 3; // // panel1 @@ -147,11 +145,10 @@ this.panel1.Controls.Add(this.dataGridView1); this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; this.panel1.EdgeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(41)))), ((int)(((byte)(50))))); - this.panel1.Location = new System.Drawing.Point(4, 71); - this.panel1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.panel1.Location = new System.Drawing.Point(3, 57); this.panel1.Name = "panel1"; - this.panel1.Padding = new System.Windows.Forms.Padding(7, 6, 7, 6); - this.panel1.Size = new System.Drawing.Size(1569, 1094); + this.panel1.Padding = new System.Windows.Forms.Padding(5, 5, 5, 5); + this.panel1.Size = new System.Drawing.Size(1217, 845); this.panel1.SmoothingType = System.Drawing.Drawing2D.SmoothingMode.HighQuality; this.panel1.TabIndex = 4; this.panel1.Text = "panel1"; @@ -160,26 +157,24 @@ // this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.dataGridView1.Dock = System.Windows.Forms.DockStyle.Fill; - this.dataGridView1.Location = new System.Drawing.Point(7, 6); - this.dataGridView1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.dataGridView1.Location = new System.Drawing.Point(5, 5); this.dataGridView1.Name = "dataGridView1"; this.dataGridView1.RowHeadersWidth = 51; this.dataGridView1.RowTemplate.Height = 23; - this.dataGridView1.Size = new System.Drawing.Size(1555, 1082); + this.dataGridView1.Size = new System.Drawing.Size(1207, 835); this.dataGridView1.TabIndex = 0; // // AnalyzeDataForm // - this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F); + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(1585, 1203); + this.ClientSize = new System.Drawing.Size(1229, 932); this.Controls.Add(this.tableLayoutPanel1); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; this.FormStyle = MaterialSkin.Controls.MaterialForm.FormStyles.ActionBar_None; this.MainMenuStrip = this.miniToolStrip; - this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); this.Name = "AnalyzeDataForm"; - this.Padding = new System.Windows.Forms.Padding(4, 30, 4, 4); + this.Padding = new System.Windows.Forms.Padding(3, 24, 3, 3); this.Text = "AnalyzeDataForm"; this.crownMenuStrip1.ResumeLayout(false); this.crownMenuStrip1.PerformLayout(); diff --git a/src/PBAnaly/UI/LanesImagePaletteForm.Designer.cs b/src/PBAnaly/UI/LanesImagePaletteForm.Designer.cs index d63db06..2e1f910 100644 --- a/src/PBAnaly/UI/LanesImagePaletteForm.Designer.cs +++ b/src/PBAnaly/UI/LanesImagePaletteForm.Designer.cs @@ -31,24 +31,24 @@ this.collapse1 = new AntdUI.Collapse(); this.clasi_lanes = new AntdUI.CollapseItem(); this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.clasi_init = new AntdUI.CollapseItem(); - this.materialButton1 = new MaterialSkin.Controls.MaterialButton(); - this.numericUpDown1 = new System.Windows.Forms.NumericUpDown(); - this.materialCheckbox1 = new MaterialSkin.Controls.MaterialCheckbox(); + this.mb_findLanes = new MaterialSkin.Controls.MaterialButton(); this.materialButton2 = new MaterialSkin.Controls.MaterialButton(); this.materialButton3 = new MaterialSkin.Controls.MaterialButton(); this.materialButton4 = new MaterialSkin.Controls.MaterialButton(); + this.panel1 = new AntdUI.Panel(); + this.label1 = new AntdUI.Label(); + this.numericUpDown1 = new System.Windows.Forms.NumericUpDown(); + this.checkbox1 = new AntdUI.Checkbox(); + this.clasi_init = new AntdUI.CollapseItem(); + this.materialCheckbox1 = new MaterialSkin.Controls.MaterialCheckbox(); this.clasi_strips = new AntdUI.CollapseItem(); this.clasi_conformity = new AntdUI.CollapseItem(); - this.panel1 = new AntdUI.Panel(); - this.checkbox1 = new AntdUI.Checkbox(); - this.label1 = new AntdUI.Label(); this.collapse1.SuspendLayout(); this.clasi_lanes.SuspendLayout(); this.tableLayoutPanel1.SuspendLayout(); - this.clasi_init.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).BeginInit(); this.panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).BeginInit(); + this.clasi_init.SuspendLayout(); this.SuspendLayout(); // // collapse1 @@ -65,8 +65,9 @@ this.collapse1.Items.Add(this.clasi_strips); this.collapse1.Items.Add(this.clasi_conformity); this.collapse1.Location = new System.Drawing.Point(0, 0); + this.collapse1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); this.collapse1.Name = "collapse1"; - this.collapse1.Size = new System.Drawing.Size(405, 619); + this.collapse1.Size = new System.Drawing.Size(304, 495); this.collapse1.TabIndex = 0; this.collapse1.Text = "collapse1"; // @@ -74,90 +75,59 @@ // this.clasi_lanes.Controls.Add(this.tableLayoutPanel1); this.clasi_lanes.Expand = true; - this.clasi_lanes.Location = new System.Drawing.Point(23, 72); + this.clasi_lanes.Location = new System.Drawing.Point(18, 58); + this.clasi_lanes.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); this.clasi_lanes.Name = "clasi_lanes"; - this.clasi_lanes.Size = new System.Drawing.Size(359, 219); + this.clasi_lanes.Size = new System.Drawing.Size(268, 175); this.clasi_lanes.TabIndex = 0; this.clasi_lanes.Text = "泳道"; // // tableLayoutPanel1 // this.tableLayoutPanel1.ColumnCount = 6; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 110F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 82F)); 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, 72F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 15F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 10F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 30F)); - this.tableLayoutPanel1.Controls.Add(this.materialButton1, 0, 0); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 54F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 11F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 8F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 22F)); + this.tableLayoutPanel1.Controls.Add(this.mb_findLanes, 0, 0); this.tableLayoutPanel1.Controls.Add(this.materialButton2, 0, 1); this.tableLayoutPanel1.Controls.Add(this.materialButton3, 0, 2); this.tableLayoutPanel1.Controls.Add(this.materialButton4, 0, 3); this.tableLayoutPanel1.Controls.Add(this.panel1, 1, 0); this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); this.tableLayoutPanel1.Name = "tableLayoutPanel1"; this.tableLayoutPanel1.RowCount = 5; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 45F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 45F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 45F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 45F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 36F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 36F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 36F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 36F)); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(359, 219); + this.tableLayoutPanel1.Size = new System.Drawing.Size(268, 175); this.tableLayoutPanel1.TabIndex = 0; // - // clasi_init + // mb_findLanes // - this.clasi_init.Controls.Add(this.materialCheckbox1); - this.clasi_init.Expand = true; - this.clasi_init.Location = new System.Drawing.Point(23, 380); - this.clasi_init.Name = "clasi_init"; - this.clasi_init.Size = new System.Drawing.Size(359, 202); - this.clasi_init.TabIndex = 1; - this.clasi_init.Text = "初始井"; - // - // materialButton1 - // - this.materialButton1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.materialButton1.Density = MaterialSkin.Controls.MaterialButton.MaterialButtonDensity.Default; - this.materialButton1.Depth = 0; - this.materialButton1.Dock = System.Windows.Forms.DockStyle.Fill; - this.materialButton1.HighEmphasis = true; - this.materialButton1.Icon = null; - this.materialButton1.Location = new System.Drawing.Point(4, 6); - this.materialButton1.Margin = new System.Windows.Forms.Padding(4, 6, 4, 6); - this.materialButton1.MouseState = MaterialSkin.MouseState.HOVER; - this.materialButton1.Name = "materialButton1"; - this.materialButton1.NoAccentTextColor = System.Drawing.Color.Empty; - this.materialButton1.Size = new System.Drawing.Size(102, 33); - this.materialButton1.TabIndex = 0; - this.materialButton1.Text = "查找泳道"; - this.materialButton1.Type = MaterialSkin.Controls.MaterialButton.MaterialButtonType.Contained; - this.materialButton1.UseAccentColor = false; - this.materialButton1.UseVisualStyleBackColor = true; - // - // numericUpDown1 - // - this.numericUpDown1.Location = new System.Drawing.Point(108, 85); - this.numericUpDown1.Name = "numericUpDown1"; - this.numericUpDown1.Size = new System.Drawing.Size(76, 25); - this.numericUpDown1.TabIndex = 6; - // - // materialCheckbox1 - // - this.materialCheckbox1.AutoSize = true; - this.materialCheckbox1.Depth = 0; - this.materialCheckbox1.Location = new System.Drawing.Point(160, 39); - this.materialCheckbox1.Margin = new System.Windows.Forms.Padding(0); - this.materialCheckbox1.MouseLocation = new System.Drawing.Point(-1, -1); - this.materialCheckbox1.MouseState = MaterialSkin.MouseState.HOVER; - this.materialCheckbox1.Name = "materialCheckbox1"; - this.materialCheckbox1.ReadOnly = false; - this.materialCheckbox1.Ripple = true; - this.materialCheckbox1.Size = new System.Drawing.Size(131, 37); - this.materialCheckbox1.TabIndex = 4; - this.materialCheckbox1.Text = "统一泳道宽度"; - this.materialCheckbox1.UseVisualStyleBackColor = true; + this.mb_findLanes.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.mb_findLanes.Density = MaterialSkin.Controls.MaterialButton.MaterialButtonDensity.Default; + this.mb_findLanes.Depth = 0; + this.mb_findLanes.Dock = System.Windows.Forms.DockStyle.Fill; + this.mb_findLanes.HighEmphasis = true; + this.mb_findLanes.Icon = null; + this.mb_findLanes.Location = new System.Drawing.Point(3, 5); + this.mb_findLanes.Margin = new System.Windows.Forms.Padding(3, 5, 3, 5); + this.mb_findLanes.MouseState = MaterialSkin.MouseState.HOVER; + this.mb_findLanes.Name = "mb_findLanes"; + this.mb_findLanes.NoAccentTextColor = System.Drawing.Color.Empty; + this.mb_findLanes.Size = new System.Drawing.Size(76, 26); + this.mb_findLanes.TabIndex = 0; + this.mb_findLanes.Text = "查找泳道"; + this.mb_findLanes.Type = MaterialSkin.Controls.MaterialButton.MaterialButtonType.Contained; + this.mb_findLanes.UseAccentColor = false; + this.mb_findLanes.UseVisualStyleBackColor = true; // // materialButton2 // @@ -167,12 +137,12 @@ this.materialButton2.Dock = System.Windows.Forms.DockStyle.Fill; this.materialButton2.HighEmphasis = true; this.materialButton2.Icon = null; - this.materialButton2.Location = new System.Drawing.Point(4, 51); - this.materialButton2.Margin = new System.Windows.Forms.Padding(4, 6, 4, 6); + this.materialButton2.Location = new System.Drawing.Point(3, 41); + this.materialButton2.Margin = new System.Windows.Forms.Padding(3, 5, 3, 5); this.materialButton2.MouseState = MaterialSkin.MouseState.HOVER; this.materialButton2.Name = "materialButton2"; this.materialButton2.NoAccentTextColor = System.Drawing.Color.Empty; - this.materialButton2.Size = new System.Drawing.Size(102, 33); + this.materialButton2.Size = new System.Drawing.Size(76, 26); this.materialButton2.TabIndex = 1; this.materialButton2.Text = "添加泳道"; this.materialButton2.Type = MaterialSkin.Controls.MaterialButton.MaterialButtonType.Contained; @@ -187,12 +157,12 @@ this.materialButton3.Dock = System.Windows.Forms.DockStyle.Fill; this.materialButton3.HighEmphasis = true; this.materialButton3.Icon = null; - this.materialButton3.Location = new System.Drawing.Point(4, 96); - this.materialButton3.Margin = new System.Windows.Forms.Padding(4, 6, 4, 6); + this.materialButton3.Location = new System.Drawing.Point(3, 77); + this.materialButton3.Margin = new System.Windows.Forms.Padding(3, 5, 3, 5); this.materialButton3.MouseState = MaterialSkin.MouseState.HOVER; this.materialButton3.Name = "materialButton3"; this.materialButton3.NoAccentTextColor = System.Drawing.Color.Empty; - this.materialButton3.Size = new System.Drawing.Size(102, 33); + this.materialButton3.Size = new System.Drawing.Size(76, 26); this.materialButton3.TabIndex = 2; this.materialButton3.Text = "删除泳道"; this.materialButton3.Type = MaterialSkin.Controls.MaterialButton.MaterialButtonType.Contained; @@ -207,34 +177,18 @@ this.materialButton4.Dock = System.Windows.Forms.DockStyle.Fill; this.materialButton4.HighEmphasis = true; this.materialButton4.Icon = null; - this.materialButton4.Location = new System.Drawing.Point(4, 141); - this.materialButton4.Margin = new System.Windows.Forms.Padding(4, 6, 4, 6); + this.materialButton4.Location = new System.Drawing.Point(3, 113); + this.materialButton4.Margin = new System.Windows.Forms.Padding(3, 5, 3, 5); this.materialButton4.MouseState = MaterialSkin.MouseState.HOVER; this.materialButton4.Name = "materialButton4"; this.materialButton4.NoAccentTextColor = System.Drawing.Color.Empty; - this.materialButton4.Size = new System.Drawing.Size(102, 33); + this.materialButton4.Size = new System.Drawing.Size(76, 26); this.materialButton4.TabIndex = 3; this.materialButton4.Text = "弯曲泳道"; this.materialButton4.Type = MaterialSkin.Controls.MaterialButton.MaterialButtonType.Contained; this.materialButton4.UseAccentColor = false; this.materialButton4.UseVisualStyleBackColor = true; // - // clasi_strips - // - this.clasi_strips.Location = new System.Drawing.Point(-100, -60); - this.clasi_strips.Name = "clasi_strips"; - this.clasi_strips.Size = new System.Drawing.Size(100, 60); - this.clasi_strips.TabIndex = 2; - this.clasi_strips.Text = "条带"; - // - // clasi_conformity - // - this.clasi_conformity.Location = new System.Drawing.Point(-100, -60); - this.clasi_conformity.Name = "clasi_conformity"; - this.clasi_conformity.Size = new System.Drawing.Size(100, 60); - this.clasi_conformity.TabIndex = 3; - this.clasi_conformity.Text = "整合"; - // // panel1 // this.tableLayoutPanel1.SetColumnSpan(this.panel1, 4); @@ -242,49 +196,105 @@ this.panel1.Controls.Add(this.numericUpDown1); this.panel1.Controls.Add(this.checkbox1); this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel1.Location = new System.Drawing.Point(113, 3); + this.panel1.Location = new System.Drawing.Point(84, 2); + this.panel1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); this.panel1.Name = "panel1"; this.tableLayoutPanel1.SetRowSpan(this.panel1, 4); - this.panel1.Size = new System.Drawing.Size(213, 174); + this.panel1.Size = new System.Drawing.Size(160, 140); this.panel1.TabIndex = 4; this.panel1.Text = "panel1"; // - // checkbox1 - // - this.checkbox1.AutoCheck = true; - this.checkbox1.Location = new System.Drawing.Point(3, 48); - this.checkbox1.Name = "checkbox1"; - this.checkbox1.Size = new System.Drawing.Size(141, 23); - this.checkbox1.TabIndex = 0; - this.checkbox1.Text = "统一泳道宽度"; - // // label1 // this.label1.Font = new System.Drawing.Font("宋体", 7.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.label1.Location = new System.Drawing.Point(3, 79); + this.label1.Location = new System.Drawing.Point(2, 40); + this.label1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(99, 31); + this.label1.Size = new System.Drawing.Size(114, 25); this.label1.TabIndex = 7; this.label1.Text = "泳道宽度(像素)"; // + // numericUpDown1 + // + this.numericUpDown1.Location = new System.Drawing.Point(2, 69); + this.numericUpDown1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.numericUpDown1.Name = "numericUpDown1"; + this.numericUpDown1.Size = new System.Drawing.Size(57, 21); + this.numericUpDown1.TabIndex = 6; + // + // checkbox1 + // + this.checkbox1.AutoCheck = true; + this.checkbox1.Location = new System.Drawing.Point(2, 11); + this.checkbox1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.checkbox1.Name = "checkbox1"; + this.checkbox1.Size = new System.Drawing.Size(106, 18); + this.checkbox1.TabIndex = 0; + this.checkbox1.Text = "统一泳道宽度"; + // + // clasi_init + // + this.clasi_init.Controls.Add(this.materialCheckbox1); + this.clasi_init.Expand = true; + this.clasi_init.Location = new System.Drawing.Point(18, 305); + this.clasi_init.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.clasi_init.Name = "clasi_init"; + this.clasi_init.Size = new System.Drawing.Size(268, 162); + this.clasi_init.TabIndex = 1; + this.clasi_init.Text = "初始井"; + // + // materialCheckbox1 + // + this.materialCheckbox1.AutoSize = true; + this.materialCheckbox1.Depth = 0; + this.materialCheckbox1.Location = new System.Drawing.Point(120, 31); + this.materialCheckbox1.Margin = new System.Windows.Forms.Padding(0); + this.materialCheckbox1.MouseLocation = new System.Drawing.Point(-1, -1); + this.materialCheckbox1.MouseState = MaterialSkin.MouseState.HOVER; + this.materialCheckbox1.Name = "materialCheckbox1"; + this.materialCheckbox1.ReadOnly = false; + this.materialCheckbox1.Ripple = true; + this.materialCheckbox1.Size = new System.Drawing.Size(131, 37); + this.materialCheckbox1.TabIndex = 4; + this.materialCheckbox1.Text = "统一泳道宽度"; + this.materialCheckbox1.UseVisualStyleBackColor = true; + // + // clasi_strips + // + this.clasi_strips.Location = new System.Drawing.Point(-75, -48); + this.clasi_strips.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.clasi_strips.Name = "clasi_strips"; + this.clasi_strips.Size = new System.Drawing.Size(75, 48); + this.clasi_strips.TabIndex = 2; + this.clasi_strips.Text = "条带"; + // + // clasi_conformity + // + this.clasi_conformity.Location = new System.Drawing.Point(-75, -48); + this.clasi_conformity.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.clasi_conformity.Name = "clasi_conformity"; + this.clasi_conformity.Size = new System.Drawing.Size(75, 48); + this.clasi_conformity.TabIndex = 3; + this.clasi_conformity.Text = "整合"; + // // LanesImagePaletteForm // - this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F); + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(405, 619); + this.ClientSize = new System.Drawing.Size(304, 495); this.Controls.Add(this.collapse1); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; - this.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); this.Name = "LanesImagePaletteForm"; this.Text = "BioanayImagePaletteForm"; this.collapse1.ResumeLayout(false); this.clasi_lanes.ResumeLayout(false); this.tableLayoutPanel1.ResumeLayout(false); this.tableLayoutPanel1.PerformLayout(); + this.panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).EndInit(); this.clasi_init.ResumeLayout(false); this.clasi_init.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).EndInit(); - this.panel1.ResumeLayout(false); this.ResumeLayout(false); } @@ -299,12 +309,12 @@ private MaterialSkin.Controls.MaterialButton materialButton4; private MaterialSkin.Controls.MaterialButton materialButton3; private MaterialSkin.Controls.MaterialButton materialButton2; - private MaterialSkin.Controls.MaterialButton materialButton1; private System.Windows.Forms.NumericUpDown numericUpDown1; private MaterialSkin.Controls.MaterialCheckbox materialCheckbox1; private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; private AntdUI.Panel panel1; private AntdUI.Checkbox checkbox1; private AntdUI.Label label1; + public MaterialSkin.Controls.MaterialButton mb_findLanes; } } \ No newline at end of file From 715df18c76d8ef242f1ac914fe54745d19e7d96d Mon Sep 17 00:00:00 2001 From: moco Date: Mon, 30 Dec 2024 23:32:11 +0800 Subject: [PATCH 2/8] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=95=B8=E5=8F=98?= =?UTF-8?q?=E7=9F=AB=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/PBAnaly/Module/BioanalysisMannage.cs | 14 ++- src/PBBiologyVC/PBImageProcessVC.cpp | 139 +++++++++++++++++++++++ src/PBBiologyVC/PBImageProcessVC.h | 3 + 3 files changed, 155 insertions(+), 1 deletion(-) diff --git a/src/PBAnaly/Module/BioanalysisMannage.cs b/src/PBAnaly/Module/BioanalysisMannage.cs index e7bed37..07b7c9f 100644 --- a/src/PBAnaly/Module/BioanalysisMannage.cs +++ b/src/PBAnaly/Module/BioanalysisMannage.cs @@ -593,7 +593,19 @@ namespace PBAnaly.Module tif_marker_path = tifFile; image_mark_L16 = util.LoadTiffAsL16(tif_marker_path); image_mark_byte = util.ConvertL16ImageToByteArray(image_mark_L16); - + byte[] bytes = new byte[image_mark_byte.Length]; + unsafe + { + fixed (byte* p = image_mark_byte) + { + fixed (byte* p1 = bytes) + { + pbpvc.distortion_correction_vc(p, 16, (ushort)image_mark_L16.Width, (ushort)image_mark_L16.Height, p1); + } + } + image_mark_byte = bytes; + image_mark_L16 = util.ConvertByteArrayToL16Image(image_mark_byte, image_mark_L16.Width, image_mark_L16.Height, 1); + } } else { diff --git a/src/PBBiologyVC/PBImageProcessVC.cpp b/src/PBBiologyVC/PBImageProcessVC.cpp index 67f3abf..95ba9e1 100644 --- a/src/PBBiologyVC/PBImageProcessVC.cpp +++ b/src/PBBiologyVC/PBImageProcessVC.cpp @@ -191,3 +191,142 @@ void PBBiologyVC::PBImageProcessVC::setSharpen_vc(System::Byte* mat, int bit, un std::memcpy(mat, dst.data, byteCount); } +void PBBiologyVC::PBImageProcessVC::distortion_correction_vc(System::Byte* mat,int bit, unsigned short width, unsigned short height, System::Byte* dst) +{ + cv::Mat image(height, width, CV_16UC1, mat); + //cv::Mat mat = cv::imread("testImage/6.tif", cv::IMREAD_ANYDEPTH); + //std::cout << mat.type() << std::endl; + //cv::Mat gray; + //mat.convertTo(gray, CV_8U, 1.0 / 256); + float pixel_size = 0; + cv::Mat cameraMatrix = cv::Mat::eye(3, 3, CV_64F); // ʼ + cv::Mat distCoeffs = cv::Mat::zeros(8, 1, CV_64F); // ϵʼ + if (width == 1413 && height == 944) + { + pixel_size = 0.146854; + + cameraMatrix = (cv::Mat_(3, 3) << + 13424.3, 0, 699.116, + 0, 13418.2, 457.194, + 0, 0, 1); + distCoeffs = (cv::Mat_(1, 5) << + -13.09138374714043, + 1096.760467172357, + -0.01255686300425431, + -0.02193325448828992, + 6.210517199273205); + + } + else if (width == 2120 && height == 1416) + { + pixel_size = 0.0979912; + + cameraMatrix = (cv::Mat_(3, 3) << + 30615.6, 0, 1075.35, + 0 ,30549.6, 671.703, + 0, 0, 1); + distCoeffs = (cv::Mat_(1, 5) << + -28.27314484356243, + 4861.062216658945, + -0.005201762355309857, + -0.04199660720547452, + 16.86437358623617); + + } + else if (width == 4240 && height == 2832) + { + pixel_size = 0.0488135; + cameraMatrix = (cv::Mat_(3, 3) << + 55720.2, 0 ,2069.75, + 0, 55692.2 ,1330.99, + 0, 0, 1); + distCoeffs = (cv::Mat_(1, 5) << + -26.49169599273552, + 4221.103679926392, + 0.002303751568779423, + -0.01228639356798468, + 16.46220656874338); + + + } + else if (width == 1046 && height == 700) + { + pixel_size = 0.197999; + cameraMatrix = (cv::Mat_(3, 3) << + 12403.6 ,0, 509.269, + 0 ,12392.3 ,317.452, + 0, 0, 1); + distCoeffs = (cv::Mat_(1, 5) << + -20.53803884839358, + 2982.635509064052, + 0.006638792032366512, + -0.02166487691462552, + 12.66787776344682); + } + else if (width == 1570 && height == 1051) + { + pixel_size = 0.132058; + cameraMatrix = (cv::Mat_(3, 3) << + 13074.3, 0, 782.395, + 0 ,13067.7, 500.374, + 0, 0, 1); + distCoeffs = (cv::Mat_(1, 5) << + -10.46123267078845, + 837.3603920854447, + -0.006721123253779827, + -0.0264263519058049, + 5.094811028131693); + + } + else if (width == 3140 && height == 2102) + { + pixel_size = 0.0657731; + cameraMatrix = (cv::Mat_(3, 3) << + 39272.7, 0, 1553.26, + 0 ,39357.7, 776.553, + 0, 0, 1); + distCoeffs = (cv::Mat_(1, 5) << + -22.14092395647976, + 2198.79303457571, + 0.0926857564915898, + -0.01814724403191658, + 6.983496103826432); + + } + Mat dstR = distortion_correction(image, cameraMatrix, distCoeffs); + std::memcpy(dst, dstR.data, dstR.cols * dstR.rows *2); + /*std::cout << "wxh" << width << "x" << height << "d wxh" << dstR.cols << "x" << dstR.rows << std::endl;*/ + + //cv::Size patternSize(8, 5); + //cv::Mat cameraMatrix; + //cv::Mat distCoeffs; + //float pixel_size = 0; + //bool ret = camera_calibration(gray, patternSize,28.0f,cameraMatrix, distCoeffs, pixel_size); + //if (ret) + //{ + // std::cout << "f=" << pixel_size << std::endl; + + // // ӡ cameraMatrix + // std::cout << "cameraMatrix: " << std::endl; + // for (int i = 0; i < cameraMatrix.rows; ++i) { + // for (int j = 0; j < cameraMatrix.cols; ++j) { + // std::cout << cameraMatrix.at(i, j) << " "; + // } + // std::cout << std::endl; + // } + + // // ӡ distCoeffs + // std::cout << "distCoeffs: " << std::endl; + // for (int i = 0; i < distCoeffs.rows; ++i) { + // for (int j = 0; j < distCoeffs.cols; ++j) { + // std::cout << distCoeffs.at(i, j) << " "; + // } + // std::cout << std::endl; + // } + + // std::cout << "cameraMatrix: " << cameraMatrix << std::endl; + // std::cout << "distCoeffs: " << distCoeffs << std::endl; + //} + +} + diff --git a/src/PBBiologyVC/PBImageProcessVC.h b/src/PBBiologyVC/PBImageProcessVC.h index 5af47ce..bb5eb5b 100644 --- a/src/PBBiologyVC/PBImageProcessVC.h +++ b/src/PBBiologyVC/PBImageProcessVC.h @@ -49,6 +49,9 @@ namespace PBBiologyVC { PBBiologyVC::Pseudo_infoVC^ get_pseudo_info_polygon_vc(System::Byte* mat, int bit, unsigned short width, unsigned short height, float max, float min, List^ list_point); PBBiologyVC::Pseudo_infoVC^ get_pseudo_info_wand_vc(System::Byte* mat, System::Byte* dst, int bit, unsigned short width, unsigned short height, float max, float min, int x, int y, int th, int% _dstW, int% _dstH, int% _dstX, int% _dstY); void setSharpen_vc(System::Byte* mat, int bit, unsigned short width, unsigned short height); + + void distortion_correction_vc(System::Byte* image, int bit, unsigned short width, unsigned short height, System::Byte* dst); + private: }; From f5906aeaac735757aa9fd666cec308e1872fcab1 Mon Sep 17 00:00:00 2001 From: moco Date: Wed, 1 Jan 2025 10:54:49 +0800 Subject: [PATCH 3/8] =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E7=95=B8=E5=8F=98?= =?UTF-8?q?=E7=9F=AB=E6=AD=A3=E5=BE=97=E5=88=B0=E7=9A=84=E6=B5=8B=E8=B7=9D?= =?UTF-8?q?=E8=B7=9D=E7=A6=BB=E8=BD=AC=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/PBAnaly/Module/BioanalysisMannage.cs | 5 +- .../UI/BioanayImagePaletteForm.Designer.cs | 320 ++++++++---------- src/PBBiologyVC/PBImageProcessVC.cpp | 4 +- src/PBBiologyVC/PBImageProcessVC.h | 2 +- 4 files changed, 148 insertions(+), 183 deletions(-) diff --git a/src/PBAnaly/Module/BioanalysisMannage.cs b/src/PBAnaly/Module/BioanalysisMannage.cs index 07b7c9f..8a66501 100644 --- a/src/PBAnaly/Module/BioanalysisMannage.cs +++ b/src/PBAnaly/Module/BioanalysisMannage.cs @@ -45,6 +45,8 @@ namespace PBAnaly.Module public int colorIndex; public bool sharpen; //锐化 + + public float pixel_size; } public struct RectAttribute @@ -600,7 +602,7 @@ namespace PBAnaly.Module { fixed (byte* p1 = bytes) { - pbpvc.distortion_correction_vc(p, 16, (ushort)image_mark_L16.Width, (ushort)image_mark_L16.Height, p1); + algAttribute.pixel_size = pbpvc.distortion_correction_vc(p, 16, (ushort)image_mark_L16.Width, (ushort)image_mark_L16.Height, p1); } } image_mark_byte = bytes; @@ -1577,6 +1579,7 @@ namespace PBAnaly.Module double deltaX = endPoint.X - startPoint.X; double deltaY = endPoint.Y - startPoint.Y; var value = Math.Sqrt(deltaX * deltaX + deltaY * deltaY); + value = value * algAttribute.pixel_size; imagePaletteForm.flb_act_mm.Text = value.ToString() + " mm"; imagePaletteForm.flb_act_mm.Refresh(); } diff --git a/src/PBAnaly/UI/BioanayImagePaletteForm.Designer.cs b/src/PBAnaly/UI/BioanayImagePaletteForm.Designer.cs index 7e7d975..a665499 100644 --- a/src/PBAnaly/UI/BioanayImagePaletteForm.Designer.cs +++ b/src/PBAnaly/UI/BioanayImagePaletteForm.Designer.cs @@ -116,11 +116,10 @@ this.fb_fixSetting.EnabledCalc = true; this.fb_fixSetting.Font = new System.Drawing.Font("Segoe UI", 10F); this.fb_fixSetting.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(66)))), ((int)(((byte)(78)))), ((int)(((byte)(90))))); - this.fb_fixSetting.Location = new System.Drawing.Point(183, 39); - this.fb_fixSetting.Margin = new System.Windows.Forms.Padding(4); + this.fb_fixSetting.Location = new System.Drawing.Point(137, 31); this.fb_fixSetting.Name = "fb_fixSetting"; this.fb_fixSetting.OverColor = System.Drawing.Color.FromArgb(((int)(((byte)(242)))), ((int)(((byte)(242)))), ((int)(((byte)(242))))); - this.fb_fixSetting.Size = new System.Drawing.Size(79, 39); + this.fb_fixSetting.Size = new System.Drawing.Size(59, 31); this.fb_fixSetting.TabIndex = 6; this.fb_fixSetting.Text = "修改"; // @@ -129,10 +128,9 @@ this.foxLabel7.BackColor = System.Drawing.Color.Transparent; this.foxLabel7.Font = new System.Drawing.Font("Segoe UI", 10F, System.Drawing.FontStyle.Bold); this.foxLabel7.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(76)))), ((int)(((byte)(88)))), ((int)(((byte)(100))))); - this.foxLabel7.Location = new System.Drawing.Point(160, 6); - this.foxLabel7.Margin = new System.Windows.Forms.Padding(4); + this.foxLabel7.Location = new System.Drawing.Point(120, 5); this.foxLabel7.Name = "foxLabel7"; - this.foxLabel7.Size = new System.Drawing.Size(35, 24); + this.foxLabel7.Size = new System.Drawing.Size(26, 19); this.foxLabel7.TabIndex = 4; this.foxLabel7.Text = "r="; // @@ -141,10 +139,9 @@ this.foxLabel5.BackColor = System.Drawing.Color.Transparent; this.foxLabel5.Font = new System.Drawing.Font("Segoe UI", 10F, System.Drawing.FontStyle.Bold); this.foxLabel5.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(76)))), ((int)(((byte)(88)))), ((int)(((byte)(100))))); - this.foxLabel5.Location = new System.Drawing.Point(4, 39); - this.foxLabel5.Margin = new System.Windows.Forms.Padding(4); + this.foxLabel5.Location = new System.Drawing.Point(3, 31); this.foxLabel5.Name = "foxLabel5"; - this.foxLabel5.Size = new System.Drawing.Size(35, 24); + this.foxLabel5.Size = new System.Drawing.Size(26, 19); this.foxLabel5.TabIndex = 2; this.foxLabel5.Text = "h="; // @@ -155,10 +152,9 @@ this.foxLabel8.Dock = System.Windows.Forms.DockStyle.Fill; this.foxLabel8.Font = new System.Drawing.Font("宋体", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.foxLabel8.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(76)))), ((int)(((byte)(88)))), ((int)(((byte)(100))))); - this.foxLabel8.Location = new System.Drawing.Point(4, 246); - this.foxLabel8.Margin = new System.Windows.Forms.Padding(4); + this.foxLabel8.Location = new System.Drawing.Point(3, 197); this.foxLabel8.Name = "foxLabel8"; - this.foxLabel8.Size = new System.Drawing.Size(266, 22); + this.foxLabel8.Size = new System.Drawing.Size(198, 18); this.foxLabel8.TabIndex = 34; this.foxLabel8.Text = "Color Rable"; // @@ -169,10 +165,9 @@ this.flb_act_mm.Dock = System.Windows.Forms.DockStyle.Fill; this.flb_act_mm.Font = new System.Drawing.Font("宋体", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.flb_act_mm.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(76)))), ((int)(((byte)(88)))), ((int)(((byte)(100))))); - this.flb_act_mm.Location = new System.Drawing.Point(125, 216); - this.flb_act_mm.Margin = new System.Windows.Forms.Padding(4); + this.flb_act_mm.Location = new System.Drawing.Point(93, 173); this.flb_act_mm.Name = "flb_act_mm"; - this.flb_act_mm.Size = new System.Drawing.Size(220, 22); + this.flb_act_mm.Size = new System.Drawing.Size(164, 18); this.flb_act_mm.TabIndex = 30; this.flb_act_mm.Text = "0 mm"; // @@ -182,10 +177,9 @@ this.foxLabel9.Dock = System.Windows.Forms.DockStyle.Fill; this.foxLabel9.Font = new System.Drawing.Font("宋体", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.foxLabel9.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(76)))), ((int)(((byte)(88)))), ((int)(((byte)(100))))); - this.foxLabel9.Location = new System.Drawing.Point(4, 143); - this.foxLabel9.Margin = new System.Windows.Forms.Padding(4); + this.foxLabel9.Location = new System.Drawing.Point(3, 115); this.foxLabel9.Name = "foxLabel9"; - this.foxLabel9.Size = new System.Drawing.Size(59, 37); + this.foxLabel9.Size = new System.Drawing.Size(44, 30); this.foxLabel9.TabIndex = 18; this.foxLabel9.Text = "Max"; // @@ -195,10 +189,9 @@ this.foxLabel6.Dock = System.Windows.Forms.DockStyle.Fill; this.foxLabel6.Font = new System.Drawing.Font("宋体", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.foxLabel6.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(76)))), ((int)(((byte)(88)))), ((int)(((byte)(100))))); - this.foxLabel6.Location = new System.Drawing.Point(4, 98); - this.foxLabel6.Margin = new System.Windows.Forms.Padding(4); + this.foxLabel6.Location = new System.Drawing.Point(3, 79); this.foxLabel6.Name = "foxLabel6"; - this.foxLabel6.Size = new System.Drawing.Size(59, 37); + this.foxLabel6.Size = new System.Drawing.Size(44, 30); this.foxLabel6.TabIndex = 13; this.foxLabel6.Text = "Min"; // @@ -208,10 +201,9 @@ this.foxLabel2.Dock = System.Windows.Forms.DockStyle.Fill; this.foxLabel2.Font = new System.Drawing.Font("宋体", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.foxLabel2.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(76)))), ((int)(((byte)(88)))), ((int)(((byte)(100))))); - this.foxLabel2.Location = new System.Drawing.Point(4, 76); - this.foxLabel2.Margin = new System.Windows.Forms.Padding(4); + this.foxLabel2.Location = new System.Drawing.Point(3, 61); this.foxLabel2.Name = "foxLabel2"; - this.foxLabel2.Size = new System.Drawing.Size(59, 14); + this.foxLabel2.Size = new System.Drawing.Size(44, 12); this.foxLabel2.TabIndex = 10; this.foxLabel2.Text = "色阶"; // @@ -221,10 +213,9 @@ this.foxLabel3.Dock = System.Windows.Forms.DockStyle.Fill; this.foxLabel3.Font = new System.Drawing.Font("宋体", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.foxLabel3.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(76)))), ((int)(((byte)(88)))), ((int)(((byte)(100))))); - this.foxLabel3.Location = new System.Drawing.Point(4, 40); - this.foxLabel3.Margin = new System.Windows.Forms.Padding(4); + this.foxLabel3.Location = new System.Drawing.Point(3, 32); this.foxLabel3.Name = "foxLabel3"; - this.foxLabel3.Size = new System.Drawing.Size(59, 28); + this.foxLabel3.Size = new System.Drawing.Size(44, 23); this.foxLabel3.TabIndex = 6; this.foxLabel3.Text = "透明度::"; // @@ -234,10 +225,9 @@ this.foxLabel1.Dock = System.Windows.Forms.DockStyle.Fill; this.foxLabel1.Font = new System.Drawing.Font("宋体", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.foxLabel1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(76)))), ((int)(((byte)(88)))), ((int)(((byte)(100))))); - this.foxLabel1.Location = new System.Drawing.Point(4, 4); - this.foxLabel1.Margin = new System.Windows.Forms.Padding(4); + this.foxLabel1.Location = new System.Drawing.Point(3, 3); this.foxLabel1.Name = "foxLabel1"; - this.foxLabel1.Size = new System.Drawing.Size(59, 28); + this.foxLabel1.Size = new System.Drawing.Size(44, 23); this.foxLabel1.TabIndex = 1; this.foxLabel1.Text = "亮度:"; // @@ -246,20 +236,19 @@ this.foxLabel4.BackColor = System.Drawing.Color.Transparent; this.foxLabel4.Font = new System.Drawing.Font("Segoe UI", 10F, System.Drawing.FontStyle.Bold); this.foxLabel4.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(76)))), ((int)(((byte)(88)))), ((int)(((byte)(100))))); - this.foxLabel4.Location = new System.Drawing.Point(4, 4); - this.foxLabel4.Margin = new System.Windows.Forms.Padding(4); + this.foxLabel4.Location = new System.Drawing.Point(3, 3); this.foxLabel4.Name = "foxLabel4"; - this.foxLabel4.Size = new System.Drawing.Size(35, 24); + this.foxLabel4.Size = new System.Drawing.Size(26, 19); this.foxLabel4.TabIndex = 0; this.foxLabel4.Text = "w="; // // tableLayoutPanel3 // this.tableLayoutPanel3.ColumnCount = 5; - this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 45F)); - this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 45F)); - this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 45F)); - this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 45F)); + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 34F)); + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 34F)); + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 34F)); + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 34F)); this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); this.tableLayoutPanel3.Controls.Add(this.hpb_wand, 3, 0); this.tableLayoutPanel3.Controls.Add(this.hpb_xianduan, 2, 0); @@ -272,11 +261,11 @@ this.tableLayoutPanel3.Margin = new System.Windows.Forms.Padding(0); this.tableLayoutPanel3.Name = "tableLayoutPanel3"; this.tableLayoutPanel3.RowCount = 3; - this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 42F)); + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 34F)); this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25F)); - this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25F)); - this.tableLayoutPanel3.Size = new System.Drawing.Size(357, 228); + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel3.Size = new System.Drawing.Size(266, 182); this.tableLayoutPanel3.TabIndex = 0; // // hpb_wand @@ -284,10 +273,9 @@ this.hpb_wand.Dock = System.Windows.Forms.DockStyle.Fill; this.hpb_wand.Image = global::PBAnaly.Properties.Resources.魔术棒_魔法_魔术_一键; this.hpb_wand.ImageFit = AntdUI.TFit.Contain; - this.hpb_wand.Location = new System.Drawing.Point(139, 4); - this.hpb_wand.Margin = new System.Windows.Forms.Padding(4); + this.hpb_wand.Location = new System.Drawing.Point(105, 3); this.hpb_wand.Name = "hpb_wand"; - this.hpb_wand.Size = new System.Drawing.Size(37, 34); + this.hpb_wand.Size = new System.Drawing.Size(28, 28); this.hpb_wand.TabIndex = 14; this.hpb_wand.Text = "a"; // @@ -297,10 +285,9 @@ this.hpb_xianduan.Dock = System.Windows.Forms.DockStyle.Fill; this.hpb_xianduan.Image = global::PBAnaly.Properties.Resources.线段__1_; this.hpb_xianduan.ImageFit = AntdUI.TFit.Contain; - this.hpb_xianduan.Location = new System.Drawing.Point(94, 4); - this.hpb_xianduan.Margin = new System.Windows.Forms.Padding(4); + this.hpb_xianduan.Location = new System.Drawing.Point(71, 3); this.hpb_xianduan.Name = "hpb_xianduan"; - this.hpb_xianduan.Size = new System.Drawing.Size(37, 34); + this.hpb_xianduan.Size = new System.Drawing.Size(28, 28); this.hpb_xianduan.TabIndex = 13; this.hpb_xianduan.Text = "a"; // @@ -310,10 +297,9 @@ this.hpb_circe.Dock = System.Windows.Forms.DockStyle.Fill; this.hpb_circe.Image = global::PBAnaly.Properties.Resources.圆形; this.hpb_circe.ImageFit = AntdUI.TFit.Contain; - this.hpb_circe.Location = new System.Drawing.Point(49, 4); - this.hpb_circe.Margin = new System.Windows.Forms.Padding(4); + this.hpb_circe.Location = new System.Drawing.Point(37, 3); this.hpb_circe.Name = "hpb_circe"; - this.hpb_circe.Size = new System.Drawing.Size(37, 34); + this.hpb_circe.Size = new System.Drawing.Size(28, 28); this.hpb_circe.TabIndex = 0; this.hpb_circe.Text = "a"; // @@ -323,10 +309,9 @@ this.hpb_rect.Dock = System.Windows.Forms.DockStyle.Fill; this.hpb_rect.Image = global::PBAnaly.Properties.Resources._10矩形; this.hpb_rect.ImageFit = AntdUI.TFit.Contain; - this.hpb_rect.Location = new System.Drawing.Point(4, 4); - this.hpb_rect.Margin = new System.Windows.Forms.Padding(4); + this.hpb_rect.Location = new System.Drawing.Point(3, 3); this.hpb_rect.Name = "hpb_rect"; - this.hpb_rect.Size = new System.Drawing.Size(37, 34); + this.hpb_rect.Size = new System.Drawing.Size(28, 28); this.hpb_rect.TabIndex = 0; this.hpb_rect.Text = "a"; // @@ -344,10 +329,9 @@ this.panel2.Controls.Add(this.foxLabel5); this.panel2.Controls.Add(this.foxLabel4); this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel2.Location = new System.Drawing.Point(4, 46); - this.panel2.Margin = new System.Windows.Forms.Padding(4); + this.panel2.Location = new System.Drawing.Point(3, 37); this.panel2.Name = "panel2"; - this.panel2.Size = new System.Drawing.Size(349, 153); + this.panel2.Size = new System.Drawing.Size(260, 122); this.panel2.TabIndex = 14; this.panel2.Text = "panel2"; // @@ -362,10 +346,9 @@ this.dtb_th.ColorE = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))); this.dtb_th.ColorF = System.Drawing.Color.Black; this.dtb_th.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(128))))); - this.dtb_th.Location = new System.Drawing.Point(47, 92); - this.dtb_th.Margin = new System.Windows.Forms.Padding(4); + this.dtb_th.Location = new System.Drawing.Point(35, 74); this.dtb_th.Name = "dtb_th"; - this.dtb_th.Size = new System.Drawing.Size(106, 25); + this.dtb_th.Size = new System.Drawing.Size(80, 21); this.dtb_th.TabIndex = 12; this.dtb_th.Text = "100"; // @@ -374,10 +357,9 @@ this.foxLabel10.BackColor = System.Drawing.Color.Transparent; this.foxLabel10.Font = new System.Drawing.Font("Segoe UI", 10F, System.Drawing.FontStyle.Bold); this.foxLabel10.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(76)))), ((int)(((byte)(88)))), ((int)(((byte)(100))))); - this.foxLabel10.Location = new System.Drawing.Point(4, 89); - this.foxLabel10.Margin = new System.Windows.Forms.Padding(4); + this.foxLabel10.Location = new System.Drawing.Point(3, 71); this.foxLabel10.Name = "foxLabel10"; - this.foxLabel10.Size = new System.Drawing.Size(35, 24); + this.foxLabel10.Size = new System.Drawing.Size(26, 19); this.foxLabel10.TabIndex = 11; this.foxLabel10.Text = "th="; // @@ -392,10 +374,9 @@ this.dtb_r.ColorE = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))); this.dtb_r.ColorF = System.Drawing.Color.Black; this.dtb_r.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(128))))); - this.dtb_r.Location = new System.Drawing.Point(192, 6); - this.dtb_r.Margin = new System.Windows.Forms.Padding(4); + this.dtb_r.Location = new System.Drawing.Point(144, 5); this.dtb_r.Name = "dtb_r"; - this.dtb_r.Size = new System.Drawing.Size(106, 25); + this.dtb_r.Size = new System.Drawing.Size(80, 21); this.dtb_r.TabIndex = 10; this.dtb_r.Text = "10"; // @@ -410,10 +391,9 @@ this.dtb_h.ColorE = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))); this.dtb_h.ColorF = System.Drawing.Color.Black; this.dtb_h.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(128))))); - this.dtb_h.Location = new System.Drawing.Point(47, 42); - this.dtb_h.Margin = new System.Windows.Forms.Padding(4); + this.dtb_h.Location = new System.Drawing.Point(35, 34); this.dtb_h.Name = "dtb_h"; - this.dtb_h.Size = new System.Drawing.Size(106, 25); + this.dtb_h.Size = new System.Drawing.Size(80, 21); this.dtb_h.TabIndex = 9; this.dtb_h.Text = "10"; // @@ -428,10 +408,9 @@ this.dtb_w.ColorE = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))); this.dtb_w.ColorF = System.Drawing.Color.Black; this.dtb_w.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(128))))); - this.dtb_w.Location = new System.Drawing.Point(45, 6); - this.dtb_w.Margin = new System.Windows.Forms.Padding(4); + this.dtb_w.Location = new System.Drawing.Point(34, 5); this.dtb_w.Name = "dtb_w"; - this.dtb_w.Size = new System.Drawing.Size(106, 25); + this.dtb_w.Size = new System.Drawing.Size(80, 21); this.dtb_w.TabIndex = 8; this.dtb_w.Text = "10"; // @@ -440,20 +419,18 @@ this.flb_info.BackColor = System.Drawing.Color.Transparent; this.flb_info.Font = new System.Drawing.Font("Segoe UI", 10F, System.Drawing.FontStyle.Bold); this.flb_info.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(76)))), ((int)(((byte)(88)))), ((int)(((byte)(100))))); - this.flb_info.Location = new System.Drawing.Point(1, 126); - this.flb_info.Margin = new System.Windows.Forms.Padding(4); + this.flb_info.Location = new System.Drawing.Point(1, 101); this.flb_info.Name = "flb_info"; - this.flb_info.Size = new System.Drawing.Size(297, 24); + this.flb_info.Size = new System.Drawing.Size(223, 19); this.flb_info.TabIndex = 7; // // panel3 // this.panel3.Controls.Add(this.cb_continuous); this.panel3.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel3.Location = new System.Drawing.Point(184, 4); - this.panel3.Margin = new System.Windows.Forms.Padding(4); + this.panel3.Location = new System.Drawing.Point(139, 3); this.panel3.Name = "panel3"; - this.panel3.Size = new System.Drawing.Size(169, 34); + this.panel3.Size = new System.Drawing.Size(124, 28); this.panel3.TabIndex = 56; this.panel3.Text = "panel3"; // @@ -463,19 +440,18 @@ this.cb_continuous.Dock = System.Windows.Forms.DockStyle.Fill; this.cb_continuous.Font = new System.Drawing.Font("宋体", 7.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.cb_continuous.Location = new System.Drawing.Point(0, 0); - this.cb_continuous.Margin = new System.Windows.Forms.Padding(4); this.cb_continuous.Name = "cb_continuous"; - this.cb_continuous.Size = new System.Drawing.Size(169, 34); + this.cb_continuous.Size = new System.Drawing.Size(124, 28); this.cb_continuous.TabIndex = 55; this.cb_continuous.Text = "连续绘制"; // // collapseItem2 // this.collapseItem2.Controls.Add(this.tableLayoutPanel3); - this.collapseItem2.Location = new System.Drawing.Point(-357, -228); - this.collapseItem2.Margin = new System.Windows.Forms.Padding(4); + this.collapseItem2.Expand = true; + this.collapseItem2.Location = new System.Drawing.Point(19, 433); this.collapseItem2.Name = "collapseItem2"; - this.collapseItem2.Size = new System.Drawing.Size(357, 228); + this.collapseItem2.Size = new System.Drawing.Size(266, 182); this.collapseItem2.TabIndex = 1; this.collapseItem2.Text = "ROI工具"; // @@ -494,20 +470,19 @@ "RGB", "Pseudo", "Gray"}); - this.cb_colortable.Location = new System.Drawing.Point(4, 276); - this.cb_colortable.Margin = new System.Windows.Forms.Padding(4); + this.cb_colortable.Location = new System.Drawing.Point(3, 221); this.cb_colortable.Name = "cb_colortable"; - this.cb_colortable.Size = new System.Drawing.Size(113, 23); + this.cb_colortable.Size = new System.Drawing.Size(84, 20); this.cb_colortable.TabIndex = 35; // // tableLayoutPanel2 // this.tableLayoutPanel2.ColumnCount = 5; - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 67F)); - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 27F)); - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 27F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 50F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 75F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 56F)); this.tableLayoutPanel2.Controls.Add(this.cb_sharpen, 2, 5); this.tableLayoutPanel2.Controls.Add(this.nud_opacity, 4, 1); this.tableLayoutPanel2.Controls.Add(this.nud_brightness, 4, 0); @@ -533,17 +508,17 @@ this.tableLayoutPanel2.Margin = new System.Windows.Forms.Padding(0); this.tableLayoutPanel2.Name = "tableLayoutPanel2"; this.tableLayoutPanel2.RowCount = 10; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 29F)); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 29F)); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 18F)); this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 36F)); this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 36F)); this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 22F)); - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 45F)); - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 45F)); - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28F)); - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F)); - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F)); - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 36F)); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 24F)); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 24F)); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 29F)); this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel2.Size = new System.Drawing.Size(349, 340); + this.tableLayoutPanel2.Size = new System.Drawing.Size(260, 272); this.tableLayoutPanel2.TabIndex = 0; // // cb_sharpen @@ -551,29 +526,26 @@ this.cb_sharpen.AutoCheck = true; this.tableLayoutPanel2.SetColumnSpan(this.cb_sharpen, 2); this.cb_sharpen.Dock = System.Windows.Forms.DockStyle.Fill; - this.cb_sharpen.Location = new System.Drawing.Point(98, 188); - this.cb_sharpen.Margin = new System.Windows.Forms.Padding(4); + this.cb_sharpen.Location = new System.Drawing.Point(73, 151); this.cb_sharpen.Name = "cb_sharpen"; - this.cb_sharpen.Size = new System.Drawing.Size(172, 20); + this.cb_sharpen.Size = new System.Drawing.Size(128, 16); this.cb_sharpen.TabIndex = 57; this.cb_sharpen.Text = "锐化"; // // nud_opacity // this.nud_opacity.Dock = System.Windows.Forms.DockStyle.Fill; - this.nud_opacity.Location = new System.Drawing.Point(278, 40); - this.nud_opacity.Margin = new System.Windows.Forms.Padding(4); + this.nud_opacity.Location = new System.Drawing.Point(207, 32); this.nud_opacity.Name = "nud_opacity"; - this.nud_opacity.Size = new System.Drawing.Size(67, 25); + this.nud_opacity.Size = new System.Drawing.Size(50, 21); this.nud_opacity.TabIndex = 45; // // nud_brightness // this.nud_brightness.Dock = System.Windows.Forms.DockStyle.Fill; - this.nud_brightness.Location = new System.Drawing.Point(278, 4); - this.nud_brightness.Margin = new System.Windows.Forms.Padding(4); + this.nud_brightness.Location = new System.Drawing.Point(207, 3); this.nud_brightness.Name = "nud_brightness"; - this.nud_brightness.Size = new System.Drawing.Size(67, 25); + this.nud_brightness.Size = new System.Drawing.Size(50, 21); this.nud_brightness.TabIndex = 44; // // dtb_colorMax @@ -586,13 +558,13 @@ this.dtb_colorMax.EmptyBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(221)))), ((int)(((byte)(221)))), ((int)(((byte)(221))))); this.dtb_colorMax.FillBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(217)))), ((int)(((byte)(99)))), ((int)(((byte)(50))))); this.dtb_colorMax.JumpToMouse = false; - this.dtb_colorMax.Location = new System.Drawing.Point(70, 141); - this.dtb_colorMax.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.dtb_colorMax.Location = new System.Drawing.Point(52, 114); + this.dtb_colorMax.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); this.dtb_colorMax.Maximum = 100; this.dtb_colorMax.Minimum = 0; - this.dtb_colorMax.MinimumSize = new System.Drawing.Size(47, 22); + this.dtb_colorMax.MinimumSize = new System.Drawing.Size(35, 18); this.dtb_colorMax.Name = "dtb_colorMax"; - this.dtb_colorMax.Size = new System.Drawing.Size(201, 22); + this.dtb_colorMax.Size = new System.Drawing.Size(150, 22); this.dtb_colorMax.TabIndex = 40; this.dtb_colorMax.Text = "dungeonTrackBar5"; this.dtb_colorMax.ThumbBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(244)))), ((int)(((byte)(244)))), ((int)(((byte)(244))))); @@ -611,13 +583,13 @@ this.dtb_colorMin.EmptyBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(221)))), ((int)(((byte)(221)))), ((int)(((byte)(221))))); this.dtb_colorMin.FillBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(217)))), ((int)(((byte)(99)))), ((int)(((byte)(50))))); this.dtb_colorMin.JumpToMouse = false; - this.dtb_colorMin.Location = new System.Drawing.Point(70, 96); - this.dtb_colorMin.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.dtb_colorMin.Location = new System.Drawing.Point(52, 78); + this.dtb_colorMin.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); this.dtb_colorMin.Maximum = 100; this.dtb_colorMin.Minimum = 0; - this.dtb_colorMin.MinimumSize = new System.Drawing.Size(47, 22); + this.dtb_colorMin.MinimumSize = new System.Drawing.Size(35, 18); this.dtb_colorMin.Name = "dtb_colorMin"; - this.dtb_colorMin.Size = new System.Drawing.Size(201, 22); + this.dtb_colorMin.Size = new System.Drawing.Size(150, 22); this.dtb_colorMin.TabIndex = 39; this.dtb_colorMin.Text = "dungeonTrackBar4"; this.dtb_colorMin.ThumbBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(244)))), ((int)(((byte)(244)))), ((int)(((byte)(244))))); @@ -636,13 +608,13 @@ this.dtb_opacity.EmptyBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(221)))), ((int)(((byte)(221)))), ((int)(((byte)(221))))); this.dtb_opacity.FillBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(217)))), ((int)(((byte)(99)))), ((int)(((byte)(50))))); this.dtb_opacity.JumpToMouse = false; - this.dtb_opacity.Location = new System.Drawing.Point(70, 38); - this.dtb_opacity.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.dtb_opacity.Location = new System.Drawing.Point(52, 31); + this.dtb_opacity.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); this.dtb_opacity.Maximum = 100; this.dtb_opacity.Minimum = 0; - this.dtb_opacity.MinimumSize = new System.Drawing.Size(47, 22); + this.dtb_opacity.MinimumSize = new System.Drawing.Size(35, 18); this.dtb_opacity.Name = "dtb_opacity"; - this.dtb_opacity.Size = new System.Drawing.Size(201, 22); + this.dtb_opacity.Size = new System.Drawing.Size(150, 22); this.dtb_opacity.TabIndex = 37; this.dtb_opacity.Text = "dungeonTrackBar2"; this.dtb_opacity.ThumbBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(244)))), ((int)(((byte)(244)))), ((int)(((byte)(244))))); @@ -656,11 +628,10 @@ this.hpb_line.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(196)))), ((int)(((byte)(204))))); this.hpb_line.Dock = System.Windows.Forms.DockStyle.Fill; this.hpb_line.Image = global::PBAnaly.Properties.Resources.线段; - this.hpb_line.Location = new System.Drawing.Point(4, 216); - this.hpb_line.Margin = new System.Windows.Forms.Padding(4); + this.hpb_line.Location = new System.Drawing.Point(3, 173); this.hpb_line.Name = "hpb_line"; this.hpb_line.PixelOffsetType = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality; - this.hpb_line.Size = new System.Drawing.Size(59, 22); + this.hpb_line.Size = new System.Drawing.Size(44, 18); this.hpb_line.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; this.hpb_line.SmoothingType = System.Drawing.Drawing2D.SmoothingMode.HighQuality; this.hpb_line.TabIndex = 9; @@ -670,10 +641,10 @@ // pb_bgimage // this.pb_bgimage.Dock = System.Windows.Forms.DockStyle.Fill; - this.pb_bgimage.Location = new System.Drawing.Point(121, 272); + this.pb_bgimage.Location = new System.Drawing.Point(90, 218); this.pb_bgimage.Margin = new System.Windows.Forms.Padding(0); this.pb_bgimage.Name = "pb_bgimage"; - this.pb_bgimage.Size = new System.Drawing.Size(153, 36); + this.pb_bgimage.Size = new System.Drawing.Size(114, 29); this.pb_bgimage.TabIndex = 36; this.pb_bgimage.TabStop = false; // @@ -687,13 +658,13 @@ this.dtb_brightness.EmptyBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(221)))), ((int)(((byte)(221)))), ((int)(((byte)(221))))); this.dtb_brightness.FillBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(217)))), ((int)(((byte)(99)))), ((int)(((byte)(50))))); this.dtb_brightness.JumpToMouse = false; - this.dtb_brightness.Location = new System.Drawing.Point(70, 2); - this.dtb_brightness.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.dtb_brightness.Location = new System.Drawing.Point(52, 2); + this.dtb_brightness.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); this.dtb_brightness.Maximum = 100; this.dtb_brightness.Minimum = 0; - this.dtb_brightness.MinimumSize = new System.Drawing.Size(47, 22); + this.dtb_brightness.MinimumSize = new System.Drawing.Size(35, 18); this.dtb_brightness.Name = "dtb_brightness"; - this.dtb_brightness.Size = new System.Drawing.Size(201, 22); + this.dtb_brightness.Size = new System.Drawing.Size(150, 22); this.dtb_brightness.TabIndex = 2; this.dtb_brightness.Text = "dungeonTrackBar1"; this.dtb_brightness.ThumbBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(244)))), ((int)(((byte)(244)))), ((int)(((byte)(244))))); @@ -708,19 +679,18 @@ this.pl_max.BackColor = System.Drawing.Color.Transparent; this.pl_max.Controls.Add(this.nud_colorMax); this.pl_max.Dock = System.Windows.Forms.DockStyle.Fill; - this.pl_max.Location = new System.Drawing.Point(274, 139); + this.pl_max.Location = new System.Drawing.Point(204, 112); this.pl_max.Margin = new System.Windows.Forms.Padding(0); this.pl_max.Name = "pl_max"; - this.pl_max.Size = new System.Drawing.Size(75, 45); + this.pl_max.Size = new System.Drawing.Size(56, 36); this.pl_max.TabIndex = 52; this.pl_max.Text = "panel3"; // // nud_colorMax // - this.nud_colorMax.Location = new System.Drawing.Point(4, 4); - this.nud_colorMax.Margin = new System.Windows.Forms.Padding(4); + this.nud_colorMax.Location = new System.Drawing.Point(3, 3); this.nud_colorMax.Name = "nud_colorMax"; - this.nud_colorMax.Size = new System.Drawing.Size(59, 25); + this.nud_colorMax.Size = new System.Drawing.Size(44, 21); this.nud_colorMax.TabIndex = 51; // // pl_min @@ -729,19 +699,18 @@ this.pl_min.BackColor = System.Drawing.Color.Transparent; this.pl_min.Controls.Add(this.nud_colorMin); this.pl_min.Dock = System.Windows.Forms.DockStyle.Fill; - this.pl_min.Location = new System.Drawing.Point(274, 94); + this.pl_min.Location = new System.Drawing.Point(204, 76); this.pl_min.Margin = new System.Windows.Forms.Padding(0); this.pl_min.Name = "pl_min"; - this.pl_min.Size = new System.Drawing.Size(75, 45); + this.pl_min.Size = new System.Drawing.Size(56, 36); this.pl_min.TabIndex = 53; this.pl_min.Text = "panel3"; // // nud_colorMin // - this.nud_colorMin.Location = new System.Drawing.Point(4, 4); - this.nud_colorMin.Margin = new System.Windows.Forms.Padding(4); + this.nud_colorMin.Location = new System.Drawing.Point(3, 3); this.nud_colorMin.Name = "nud_colorMin"; - this.nud_colorMin.Size = new System.Drawing.Size(59, 25); + this.nud_colorMin.Size = new System.Drawing.Size(44, 21); this.nud_colorMin.TabIndex = 50; // // cb_scientific @@ -749,10 +718,9 @@ this.cb_scientific.AutoCheck = true; this.tableLayoutPanel2.SetColumnSpan(this.cb_scientific, 2); this.cb_scientific.Dock = System.Windows.Forms.DockStyle.Fill; - this.cb_scientific.Location = new System.Drawing.Point(4, 188); - this.cb_scientific.Margin = new System.Windows.Forms.Padding(4); + this.cb_scientific.Location = new System.Drawing.Point(3, 151); this.cb_scientific.Name = "cb_scientific"; - this.cb_scientific.Size = new System.Drawing.Size(86, 20); + this.cb_scientific.Size = new System.Drawing.Size(64, 16); this.cb_scientific.TabIndex = 54; this.cb_scientific.Text = "光子量"; // @@ -760,10 +728,9 @@ // this.panel1.Controls.Add(this.tableLayoutPanel2); this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel1.Location = new System.Drawing.Point(4, 4); - this.panel1.Margin = new System.Windows.Forms.Padding(4); + this.panel1.Location = new System.Drawing.Point(3, 3); this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(349, 340); + this.panel1.Size = new System.Drawing.Size(260, 272); this.panel1.TabIndex = 0; this.panel1.Text = "panel1"; // @@ -771,26 +738,26 @@ // this.tableLayoutPanel1.ColumnCount = 1; 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, 27F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0); this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(0); this.tableLayoutPanel1.Name = "tableLayoutPanel1"; this.tableLayoutPanel1.RowCount = 3; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 348F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 278F)); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 8F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(357, 378); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 6F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(266, 302); this.tableLayoutPanel1.TabIndex = 0; // // collapseItem1 // this.collapseItem1.Controls.Add(this.tableLayoutPanel1); - this.collapseItem1.Location = new System.Drawing.Point(-357, -378); - this.collapseItem1.Margin = new System.Windows.Forms.Padding(4); + this.collapseItem1.Expand = true; + this.collapseItem1.Location = new System.Drawing.Point(19, 59); this.collapseItem1.Name = "collapseItem1"; - this.collapseItem1.Size = new System.Drawing.Size(357, 378); + this.collapseItem1.Size = new System.Drawing.Size(266, 302); this.collapseItem1.TabIndex = 0; this.collapseItem1.Text = "图像调整"; // @@ -803,29 +770,27 @@ this.cll_panel.Items.Add(this.collapseItem2); this.cll_panel.Items.Add(this.collapseItem3); this.cll_panel.Location = new System.Drawing.Point(0, 0); - this.cll_panel.Margin = new System.Windows.Forms.Padding(4); this.cll_panel.Name = "cll_panel"; - this.cll_panel.Size = new System.Drawing.Size(405, 619); + this.cll_panel.Size = new System.Drawing.Size(304, 495); this.cll_panel.TabIndex = 1; this.cll_panel.Text = "fed"; // // collapseItem3 // this.collapseItem3.Controls.Add(this.tableLayoutPanel4); - this.collapseItem3.Location = new System.Drawing.Point(-357, -206); - this.collapseItem3.Margin = new System.Windows.Forms.Padding(4); + this.collapseItem3.Location = new System.Drawing.Point(-268, -165); this.collapseItem3.Name = "collapseItem3"; - this.collapseItem3.Size = new System.Drawing.Size(357, 206); + this.collapseItem3.Size = new System.Drawing.Size(268, 165); this.collapseItem3.TabIndex = 2; this.collapseItem3.Text = "标签工具"; // // tableLayoutPanel4 // this.tableLayoutPanel4.ColumnCount = 5; - this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 45F)); - this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 45F)); - this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 45F)); - this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 45F)); + this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 34F)); + this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 34F)); + this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 34F)); + this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 34F)); this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); this.tableLayoutPanel4.Controls.Add(this.panel4, 0, 1); this.tableLayoutPanel4.Controls.Add(this.ava_textbox, 0, 0); @@ -834,11 +799,11 @@ this.tableLayoutPanel4.Margin = new System.Windows.Forms.Padding(0); this.tableLayoutPanel4.Name = "tableLayoutPanel4"; this.tableLayoutPanel4.RowCount = 3; - this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 42F)); + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 34F)); this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25F)); - this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25F)); - this.tableLayoutPanel4.Size = new System.Drawing.Size(357, 206); + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel4.Size = new System.Drawing.Size(268, 165); this.tableLayoutPanel4.TabIndex = 1; // // panel4 @@ -848,10 +813,9 @@ this.panel4.Controls.Add(this.foxLabel12); this.panel4.Controls.Add(this.foxLabel15); this.panel4.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel4.Location = new System.Drawing.Point(4, 46); - this.panel4.Margin = new System.Windows.Forms.Padding(4); + this.panel4.Location = new System.Drawing.Point(3, 37); this.panel4.Name = "panel4"; - this.panel4.Size = new System.Drawing.Size(349, 131); + this.panel4.Size = new System.Drawing.Size(262, 105); this.panel4.TabIndex = 15; this.panel4.Text = "panel4"; // @@ -866,10 +830,9 @@ this.dtb_textbox.ColorE = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))); this.dtb_textbox.ColorF = System.Drawing.Color.Black; this.dtb_textbox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(128))))); - this.dtb_textbox.Location = new System.Drawing.Point(68, 4); - this.dtb_textbox.Margin = new System.Windows.Forms.Padding(4); + this.dtb_textbox.Location = new System.Drawing.Point(51, 3); this.dtb_textbox.Name = "dtb_textbox"; - this.dtb_textbox.Size = new System.Drawing.Size(106, 25); + this.dtb_textbox.Size = new System.Drawing.Size(80, 21); this.dtb_textbox.TabIndex = 8; this.dtb_textbox.Text = "10"; // @@ -878,10 +841,9 @@ this.foxLabel12.BackColor = System.Drawing.Color.Transparent; this.foxLabel12.Font = new System.Drawing.Font("Segoe UI", 10F, System.Drawing.FontStyle.Bold); this.foxLabel12.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(76)))), ((int)(((byte)(88)))), ((int)(((byte)(100))))); - this.foxLabel12.Location = new System.Drawing.Point(1, 126); - this.foxLabel12.Margin = new System.Windows.Forms.Padding(4); + this.foxLabel12.Location = new System.Drawing.Point(1, 101); this.foxLabel12.Name = "foxLabel12"; - this.foxLabel12.Size = new System.Drawing.Size(297, 24); + this.foxLabel12.Size = new System.Drawing.Size(223, 19); this.foxLabel12.TabIndex = 7; // // foxLabel15 @@ -889,10 +851,9 @@ this.foxLabel15.BackColor = System.Drawing.Color.Transparent; this.foxLabel15.Font = new System.Drawing.Font("Segoe UI", 10F, System.Drawing.FontStyle.Bold); this.foxLabel15.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(76)))), ((int)(((byte)(88)))), ((int)(((byte)(100))))); - this.foxLabel15.Location = new System.Drawing.Point(4, 4); - this.foxLabel15.Margin = new System.Windows.Forms.Padding(4); + this.foxLabel15.Location = new System.Drawing.Point(3, 3); this.foxLabel15.Name = "foxLabel15"; - this.foxLabel15.Size = new System.Drawing.Size(79, 24); + this.foxLabel15.Size = new System.Drawing.Size(59, 19); this.foxLabel15.TabIndex = 0; this.foxLabel15.Text = "value="; // @@ -902,21 +863,20 @@ this.ava_textbox.Dock = System.Windows.Forms.DockStyle.Fill; this.ava_textbox.Image = global::PBAnaly.Properties.Resources.文本; this.ava_textbox.ImageFit = AntdUI.TFit.Contain; - this.ava_textbox.Location = new System.Drawing.Point(4, 4); - this.ava_textbox.Margin = new System.Windows.Forms.Padding(4); + this.ava_textbox.Location = new System.Drawing.Point(3, 3); this.ava_textbox.Name = "ava_textbox"; - this.ava_textbox.Size = new System.Drawing.Size(37, 34); + this.ava_textbox.Size = new System.Drawing.Size(28, 28); this.ava_textbox.TabIndex = 0; this.ava_textbox.Text = "a"; // // BioanayImagePaletteForm // - this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F); + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(405, 619); + this.ClientSize = new System.Drawing.Size(304, 495); this.Controls.Add(this.cll_panel); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; - this.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); this.Name = "BioanayImagePaletteForm"; this.Text = "BioanayImagePaletteForm"; this.tableLayoutPanel3.ResumeLayout(false); diff --git a/src/PBBiologyVC/PBImageProcessVC.cpp b/src/PBBiologyVC/PBImageProcessVC.cpp index 95ba9e1..7f3495e 100644 --- a/src/PBBiologyVC/PBImageProcessVC.cpp +++ b/src/PBBiologyVC/PBImageProcessVC.cpp @@ -191,7 +191,7 @@ void PBBiologyVC::PBImageProcessVC::setSharpen_vc(System::Byte* mat, int bit, un std::memcpy(mat, dst.data, byteCount); } -void PBBiologyVC::PBImageProcessVC::distortion_correction_vc(System::Byte* mat,int bit, unsigned short width, unsigned short height, System::Byte* dst) +float PBBiologyVC::PBImageProcessVC::distortion_correction_vc(System::Byte* mat,int bit, unsigned short width, unsigned short height, System::Byte* dst) { cv::Mat image(height, width, CV_16UC1, mat); //cv::Mat mat = cv::imread("testImage/6.tif", cv::IMREAD_ANYDEPTH); @@ -295,6 +295,8 @@ void PBBiologyVC::PBImageProcessVC::distortion_correction_vc(System::Byte* mat,i } Mat dstR = distortion_correction(image, cameraMatrix, distCoeffs); std::memcpy(dst, dstR.data, dstR.cols * dstR.rows *2); + + return pixel_size; /*std::cout << "wxh" << width << "x" << height << "d wxh" << dstR.cols << "x" << dstR.rows << std::endl;*/ //cv::Size patternSize(8, 5); diff --git a/src/PBBiologyVC/PBImageProcessVC.h b/src/PBBiologyVC/PBImageProcessVC.h index bb5eb5b..1d228ef 100644 --- a/src/PBBiologyVC/PBImageProcessVC.h +++ b/src/PBBiologyVC/PBImageProcessVC.h @@ -50,7 +50,7 @@ namespace PBBiologyVC { PBBiologyVC::Pseudo_infoVC^ get_pseudo_info_wand_vc(System::Byte* mat, System::Byte* dst, int bit, unsigned short width, unsigned short height, float max, float min, int x, int y, int th, int% _dstW, int% _dstH, int% _dstX, int% _dstY); void setSharpen_vc(System::Byte* mat, int bit, unsigned short width, unsigned short height); - void distortion_correction_vc(System::Byte* image, int bit, unsigned short width, unsigned short height, System::Byte* dst); + float distortion_correction_vc(System::Byte* image, int bit, unsigned short width, unsigned short height, System::Byte* dst); private: From 5125f7229ea28c701ffe553253e1162307f2f563 Mon Sep 17 00:00:00 2001 From: moco Date: Wed, 1 Jan 2025 21:34:33 +0800 Subject: [PATCH 4/8] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=B3=B3=E9=81=93?= =?UTF-8?q?=E5=9B=BE=E6=9B=B2=E7=BA=BF=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/PBAnaly/MainForm.cs | 4 +- src/PBAnaly/Module/LanesMannage.cs | 233 +++++++++++++++++- src/PBAnaly/PBAnaly.csproj | 9 + src/PBAnaly/UI/LaneLineChartForm.Designer.cs | 110 +++++++++ src/PBAnaly/UI/LaneLineChartForm.cs | 24 ++ src/PBAnaly/UI/LaneLineChartForm.resx | 123 +++++++++ .../UI/LanesImagePaletteForm.Designer.cs | 35 ++- src/PBAnaly/UI/LanesImagePanel.Designer.cs | 161 ++++++------ 8 files changed, 588 insertions(+), 111 deletions(-) create mode 100644 src/PBAnaly/UI/LaneLineChartForm.Designer.cs create mode 100644 src/PBAnaly/UI/LaneLineChartForm.cs create mode 100644 src/PBAnaly/UI/LaneLineChartForm.resx diff --git a/src/PBAnaly/MainForm.cs b/src/PBAnaly/MainForm.cs index 1bb68be..b9f65e8 100644 --- a/src/PBAnaly/MainForm.cs +++ b/src/PBAnaly/MainForm.cs @@ -488,7 +488,7 @@ namespace PBAnaly #endregion if (selectedFilePath != "") { - + if (lanesMannages.TryGetValue(selectedFilePath, out var value)) { @@ -528,7 +528,7 @@ namespace PBAnaly //} //#endregion - //if (selectedFilePath != "") + //if (selectedFilePath != "") //{ // // Save Log Information // Read_Write_Log read_Write_Log = new Read_Write_Log(); diff --git a/src/PBAnaly/Module/LanesMannage.cs b/src/PBAnaly/Module/LanesMannage.cs index 14044c6..998c5b8 100644 --- a/src/PBAnaly/Module/LanesMannage.cs +++ b/src/PBAnaly/Module/LanesMannage.cs @@ -1,11 +1,14 @@ -using OpenCvSharp; +using Aspose.Pdf.AI; +using OpenCvSharp; using PBAnaly.UI; using PBBiologyVC; +using SharpDX.D3DCompiler; using SixLabors.ImageSharp; using SixLabors.ImageSharp.PixelFormats; using Sunny.UI; using System; using System.Collections.Generic; +using System.Drawing; using System.IO; using System.Linq; using System.Runtime.InteropServices; @@ -14,12 +17,14 @@ using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using static PBAnaly.Module.BioanalysisMannage; +using static PBAnaly.Module.LanesMannage; namespace PBAnaly.Module { public class LanesMannage { #region 构造函数 + private enum Corner { None, TopLeft, TopRight, BottomLeft, BottomRight, drawMouse } public struct band_infos { public float startX; // X作为筛选的必要条件 当鼠标进入x的范围就是进入某一个泳道,在根据y的范围判断是否在这个泳道里 @@ -32,6 +37,23 @@ namespace PBAnaly.Module public int thick; public _band_info _Info; } + + public struct Lanes_info + { + public bool isSelect;//是否被选中 + public int colorIndex; + public int x; + public int y; + public int width; + public int height; + public _band_info band_Info; + } + + public struct LanesAttribute + { + public bool showLanes; + public bool showbands; + } #endregion #region 参数 private string path { get; set; } @@ -40,7 +62,7 @@ namespace PBAnaly.Module PBBiology pbb = new PBBiology(); private Image image_L16; private byte[] image_byte; - private byte[] image_8bit_byte; + private byte[] image_8bit_rgb_byte; private Image image_rgb_24 = null; public bool IsActive { get; set; } // 当前窗口是否在活跃状态 用来判断是否需要操作 public int ImageIndex { get; set; }// 图片加载进来的序号 @@ -53,6 +75,10 @@ namespace PBAnaly.Module private bool isalgRun = false; private bool isUpdateAlg = false; private Queue queueAlgAttribute = new Queue(); + private List lanes_Infos = new List(); + + private List laneColorList = new List();// 泳道的颜色表 + private LanesAttribute lanesAttribute = new LanesAttribute(); #endregion public LanesMannage(string _path, ReaLTaiizor.Controls.Panel _pl_right, Dictionary lanesMannages) @@ -82,6 +108,7 @@ namespace PBAnaly.Module imagePaletteForm.BringToFront(); imagePaletteForm.Show(); + InitColorList(); Init(); RefreshImage();// 初始化图像 @@ -163,11 +190,38 @@ namespace PBAnaly.Module //} } + private void InitColorList() + { + laneColorList.Clear(); + + laneColorList.Add(System.Drawing.Color.Red); // 红色 + laneColorList.Add(System.Drawing.Color.Green); // 绿色 + laneColorList.Add(System.Drawing.Color.Blue); // 蓝色 + laneColorList.Add(System.Drawing.Color.Yellow); // 黄色 + laneColorList.Add(System.Drawing.Color.Purple); // 紫色 + laneColorList.Add(System.Drawing.Color.Orange); // 橙色 + laneColorList.Add(System.Drawing.Color.Pink); // 粉色 + laneColorList.Add(System.Drawing.Color.Brown); // 棕色 + laneColorList.Add(System.Drawing.Color.Gray); // 灰色 + laneColorList.Add(System.Drawing.Color.Cyan); // 青色 + laneColorList.Add(System.Drawing.Color.Magenta); // 品红 + laneColorList.Add(System.Drawing.Color.Lime); // 酸橙绿 + laneColorList.Add(System.Drawing.Color.Teal); // 水鸭色 + laneColorList.Add(System.Drawing.Color.Olive); // 橄榄色 + laneColorList.Add(System.Drawing.Color.Navy); // 海军蓝 + laneColorList.Add(System.Drawing.Color.Silver); // 银色 + laneColorList.Add(System.Drawing.Color.Gold); // 金色 + laneColorList.Add(System.Drawing.Color.Violet); // 紫罗兰色 + } /// /// 初始化控件 初始化配置 /// private void Init() { + lanesAttribute.showLanes = true; + lanesAttribute.showbands = true; + + imagePanel.image_pl.MouseDown += Image_pl_MouseDown; imagePanel.image_pl.DoubleClick += Image_pl_DoubleClick; imagePanel.image_pl.MouseMove += Image_pl_MouseMove; @@ -228,7 +282,7 @@ namespace PBAnaly.Module return false; } - image_8bit_byte = new byte[image_L16.Width * image_L16.Height * 3]; + image_8bit_rgb_byte = new byte[image_L16.Width * image_L16.Height * 3]; for (int i = 0; i < image_L16.Width * image_L16.Height; i++) { @@ -236,12 +290,12 @@ namespace PBAnaly.Module ushort pixel16bit = (ushort)(image_byte[i * 2] | (image_byte[i * 2 + 1] << 8)); byte gray = (byte)((pixel16bit / 65535.0) * 255) ; // 将R、G、B分量存储到RGB格式的数组中 - image_8bit_byte[i * 3] = gray; - image_8bit_byte[i * 3 + 1] = gray; - image_8bit_byte[i * 3 + 2] = gray; + image_8bit_rgb_byte[i * 3] = gray; + image_8bit_rgb_byte[i * 3 + 1] = gray; + image_8bit_rgb_byte[i * 3 + 2] = gray; } - image_rgb_24 = util.ConvertByteArrayToRgb24Image(image_8bit_byte, image_L16.Width, image_L16.Height,3); + image_rgb_24 = util.ConvertByteArrayToRgb24Image(image_8bit_rgb_byte, image_L16.Width, image_L16.Height,3); imagePanel.SetButtomLabel($"{image_L16.Width} x {image_L16.Height}"); if (path.Length > 0) { @@ -270,6 +324,33 @@ namespace PBAnaly.Module imagePanel.SetImage(image_rgb_24); } } + + + private bool IsPointInRectangles(System.Drawing.Point point, List _lanes, out Corner cner, out Lanes_info curRect, out int index) + { + curRect = new Lanes_info(); + cner = Corner.None; + index = 0; + foreach (var lanes in _lanes) + { + System.Drawing.Rectangle rect = new System.Drawing.Rectangle(lanes.x,lanes.y,lanes.width,lanes.height); + System.Drawing.Point topLeft = new System.Drawing.Point(rect.Left, rect.Top); + System.Drawing.Point topRight = new System.Drawing.Point(rect.Right, rect.Top); + System.Drawing.Point bottomLeft = new System.Drawing.Point(rect.Left, rect.Bottom); + System.Drawing.Point bottomRight = new System.Drawing.Point(rect.Right, rect.Bottom); + + if (rect.Contains(point)) + { + imagePanel.image_pl.Cursor = Cursors.Hand; + cner = Corner.drawMouse; + curRect = lanes; + return true; + } + index++; + + } + return false; + } #endregion @@ -278,7 +359,75 @@ namespace PBAnaly.Module private void Image_pl_Paint(object sender, PaintEventArgs e) { - + Graphics g = e.Graphics; + + int index = 0; + List colorUpdateIndex = new List(); + foreach (var rect in lanes_Infos) + { + if (index >= laneColorList.Count) + { + index = 0; + } + colorUpdateIndex.Add(index); + var color = laneColorList[index]; + System.Drawing.Rectangle p = new System.Drawing.Rectangle(rect.x, rect.y, rect.width, rect.height); + + var r = ImageProcess.ConvertRealRectangleToPictureBox(p, imagePanel.image_pl); + if (lanesAttribute.showLanes) + { + if (rect.isSelect) + { + e.Graphics.DrawRectangle(color, r, false, 6); + } + else + { + e.Graphics.DrawRectangle(color, r, false, 2); + } + } + + int centerX = (int)(p.X + (p.Right - p.X) / 2.0); + int centerY = 0; + foreach (var item in rect.band_Info.band_point) + { + if (item[0] == -1) continue; + // 绘制十字 + centerY = p.Y + item[0]; + var p1 = new System.Drawing.Point(centerX - 5, centerY); + var p2 = new System.Drawing.Point(centerX + 5, centerY); + p1 = ImageProcess.ConvertRealToPictureBox(p1, imagePanel.image_pl); + p2 = ImageProcess.ConvertRealToPictureBox(p2, imagePanel.image_pl); + + e.Graphics.DrawLine(Pens.Red, p1, p2); + p1 = new System.Drawing.Point(centerX, centerY - 5); + p2 = new System.Drawing.Point(centerX, centerY + 5); + p1 = ImageProcess.ConvertRealToPictureBox(p1, imagePanel.image_pl); + p2 = ImageProcess.ConvertRealToPictureBox(p2, imagePanel.image_pl); + e.Graphics.DrawLine(Pens.Red, p1, p2); + + // 显示条带 + if (lanesAttribute.showbands) + { + p1 = new System.Drawing.Point(p.X, p.Top + item[1]); + p2 = new System.Drawing.Point(p.Right, p.Top + item[2]); + p1 = ImageProcess.ConvertRealToPictureBox(p1, imagePanel.image_pl); + p2 = ImageProcess.ConvertRealToPictureBox(p2, imagePanel.image_pl); + + e.Graphics.DrawRectangle(Pens.Blue,p1.X,p1.Y,p2.X - p1.X,p2.Y - p1.Y); + } + + } + + + + index++; + } + for (int i = 0; i < colorUpdateIndex.Count; i++) + { + Lanes_info _Info = lanes_Infos[i]; + _Info.colorIndex = colorUpdateIndex[i]; + lanes_Infos[i] = _Info; + } } private void Image_pl_MouseUp(object sender, MouseEventArgs e) @@ -288,7 +437,13 @@ namespace PBAnaly.Module private void Image_pl_MouseMove(object sender, MouseEventArgs e) { - + System.Drawing.Point readLoction = ImageProcess.ConvertPictureBoxToReal(e.Location, imagePanel.image_pl); + imagePanel.image_pl.Cursor = Cursors.Default; + if (IsPointInRectangles(readLoction, lanes_Infos, out var cner, out var curRect, out int index)) + { + + } + } private void Image_pl_DoubleClick(object sender, EventArgs e) @@ -298,7 +453,20 @@ namespace PBAnaly.Module private void Image_pl_MouseDown(object sender, MouseEventArgs e) { + System.Drawing.Point readLoction = ImageProcess.ConvertPictureBoxToReal(e.Location, imagePanel.image_pl); Wdb_title_Click(null, null); + if (IsPointInRectangles(readLoction, lanes_Infos, out var cner, out var curRect, out int index)) + { + for (int i = 0; i < lanes_Infos.Count; i++) + { + Lanes_info lanes = lanes_Infos[i]; + lanes.isSelect = false; + lanes_Infos[i] = lanes; + } + curRect.isSelect = true; + lanes_Infos[index] = curRect; + imagePanel.image_pl.Invalidate(); + } } private void ImagePanel_FormClosed(object sender, FormClosedEventArgs e) { @@ -338,7 +506,52 @@ namespace PBAnaly.Module #region imagePalette private void Mb_findLanes_Click(object sender, EventArgs e) { - + byte[] gray = new byte[image_L16.Width * image_L16.Height]; + for (int i = 0; i < image_L16.Width * image_L16.Height; i++) + { + // 获取16位图像数据中的当前像素值 + ushort pixel16bit = (ushort)(image_byte[i * 2] | (image_byte[i * 2 + 1] << 8)); + byte grayValue = (byte)((pixel16bit / 65535.0) * 255); + gray[i] = grayValue; + } + unsafe + { + fixed (byte* data = gray) + { + // 寻找泳道 + var proteinRect = pbb.getProteinRectVC(data, (ushort)image_L16.Width, (ushort)image_L16.Height); + var band_info = new List<_band_info>(); + + // 根据泳道找条带 + fixed (byte* p = image_byte) + { + pbb.getProteinBandsVC(p, 16, (ushort)image_L16.Width, (ushort)image_L16.Height, proteinRect, ref band_info); + } + pbb.adjustBands(band_info, 5); + pbb.molecularWeightResult(ref proteinRect, ref band_info); + lanes_Infos.Clear(); + int index = 0; + foreach (var item in proteinRect) + { + + Lanes_info lanes_Info = new Lanes_info(); + if (index == 0) + { + lanes_Info.isSelect = true;// 认为查找后第一个就是被选中的状态 + } + lanes_Info.x = item.X; + lanes_Info.y = item.Y; + lanes_Info.height = item.Height; + lanes_Info.width = item.Width; + lanes_Info.band_Info = band_info[index]; + lanes_Infos.Add(lanes_Info); + index++; + } + + } + } + + imagePanel.image_pl.Invalidate(); } #endregion diff --git a/src/PBAnaly/PBAnaly.csproj b/src/PBAnaly/PBAnaly.csproj index 2221243..79d6bb5 100644 --- a/src/PBAnaly/PBAnaly.csproj +++ b/src/PBAnaly/PBAnaly.csproj @@ -150,6 +150,12 @@ AnalyzeDataForm.cs + + Form + + + LaneLineChartForm.cs + Form @@ -269,6 +275,9 @@ AnalyzeDataForm.cs + + LaneLineChartForm.cs + LanesImagePaletteForm.cs diff --git a/src/PBAnaly/UI/LaneLineChartForm.Designer.cs b/src/PBAnaly/UI/LaneLineChartForm.Designer.cs new file mode 100644 index 0000000..87e9722 --- /dev/null +++ b/src/PBAnaly/UI/LaneLineChartForm.Designer.cs @@ -0,0 +1,110 @@ +namespace PBAnaly.UI +{ + partial class LaneLineChartForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.menuStrip1 = new System.Windows.Forms.MenuStrip(); + this.文件ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.选项ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.单一泳道ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.显示多个泳道ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.显示所有泳道ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.menuStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // menuStrip1 + // + this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.文件ToolStripMenuItem, + this.选项ToolStripMenuItem}); + this.menuStrip1.Location = new System.Drawing.Point(0, 0); + this.menuStrip1.Name = "menuStrip1"; + this.menuStrip1.Size = new System.Drawing.Size(728, 25); + this.menuStrip1.TabIndex = 0; + this.menuStrip1.Text = "menuStrip1"; + // + // 文件ToolStripMenuItem + // + this.文件ToolStripMenuItem.Name = "文件ToolStripMenuItem"; + this.文件ToolStripMenuItem.Size = new System.Drawing.Size(44, 21); + this.文件ToolStripMenuItem.Text = "文件"; + // + // 选项ToolStripMenuItem + // + this.选项ToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.单一泳道ToolStripMenuItem, + this.显示多个泳道ToolStripMenuItem, + this.显示所有泳道ToolStripMenuItem}); + this.选项ToolStripMenuItem.Name = "选项ToolStripMenuItem"; + this.选项ToolStripMenuItem.Size = new System.Drawing.Size(44, 21); + this.选项ToolStripMenuItem.Text = "选项"; + // + // 单一泳道ToolStripMenuItem + // + this.单一泳道ToolStripMenuItem.Name = "单一泳道ToolStripMenuItem"; + this.单一泳道ToolStripMenuItem.Size = new System.Drawing.Size(148, 22); + this.单一泳道ToolStripMenuItem.Text = "显示单一泳道"; + // + // 显示多个泳道ToolStripMenuItem + // + this.显示多个泳道ToolStripMenuItem.Name = "显示多个泳道ToolStripMenuItem"; + this.显示多个泳道ToolStripMenuItem.Size = new System.Drawing.Size(148, 22); + this.显示多个泳道ToolStripMenuItem.Text = "显示多个泳道"; + // + // 显示所有泳道ToolStripMenuItem + // + this.显示所有泳道ToolStripMenuItem.Name = "显示所有泳道ToolStripMenuItem"; + this.显示所有泳道ToolStripMenuItem.Size = new System.Drawing.Size(148, 22); + this.显示所有泳道ToolStripMenuItem.Text = "显示所有泳道"; + // + // LaneLineChartForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(728, 394); + this.Controls.Add(this.menuStrip1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.Name = "LaneLineChartForm"; + this.Text = "泳道轮廓"; + this.menuStrip1.ResumeLayout(false); + this.menuStrip1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.MenuStrip menuStrip1; + private System.Windows.Forms.ToolStripMenuItem 文件ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 选项ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 单一泳道ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 显示多个泳道ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 显示所有泳道ToolStripMenuItem; + } +} \ No newline at end of file diff --git a/src/PBAnaly/UI/LaneLineChartForm.cs b/src/PBAnaly/UI/LaneLineChartForm.cs new file mode 100644 index 0000000..abe9595 --- /dev/null +++ b/src/PBAnaly/UI/LaneLineChartForm.cs @@ -0,0 +1,24 @@ + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace PBAnaly.UI +{ + public partial class LaneLineChartForm : Form + { + + public LaneLineChartForm() + { + InitializeComponent(); + + + } + } +} diff --git a/src/PBAnaly/UI/LaneLineChartForm.resx b/src/PBAnaly/UI/LaneLineChartForm.resx new file mode 100644 index 0000000..d5494e3 --- /dev/null +++ b/src/PBAnaly/UI/LaneLineChartForm.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 + + + 17, 17 + + \ No newline at end of file diff --git a/src/PBAnaly/UI/LanesImagePaletteForm.Designer.cs b/src/PBAnaly/UI/LanesImagePaletteForm.Designer.cs index 2e1f910..914f13a 100644 --- a/src/PBAnaly/UI/LanesImagePaletteForm.Designer.cs +++ b/src/PBAnaly/UI/LanesImagePaletteForm.Designer.cs @@ -43,6 +43,7 @@ this.materialCheckbox1 = new MaterialSkin.Controls.MaterialCheckbox(); this.clasi_strips = new AntdUI.CollapseItem(); this.clasi_conformity = new AntdUI.CollapseItem(); + this.checkbox2 = new AntdUI.Checkbox(); this.collapse1.SuspendLayout(); this.clasi_lanes.SuspendLayout(); this.tableLayoutPanel1.SuspendLayout(); @@ -65,7 +66,7 @@ this.collapse1.Items.Add(this.clasi_strips); this.collapse1.Items.Add(this.clasi_conformity); this.collapse1.Location = new System.Drawing.Point(0, 0); - this.collapse1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.collapse1.Margin = new System.Windows.Forms.Padding(2); this.collapse1.Name = "collapse1"; this.collapse1.Size = new System.Drawing.Size(304, 495); this.collapse1.TabIndex = 0; @@ -76,7 +77,7 @@ this.clasi_lanes.Controls.Add(this.tableLayoutPanel1); this.clasi_lanes.Expand = true; this.clasi_lanes.Location = new System.Drawing.Point(18, 58); - this.clasi_lanes.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.clasi_lanes.Margin = new System.Windows.Forms.Padding(2); this.clasi_lanes.Name = "clasi_lanes"; this.clasi_lanes.Size = new System.Drawing.Size(268, 175); this.clasi_lanes.TabIndex = 0; @@ -98,7 +99,7 @@ this.tableLayoutPanel1.Controls.Add(this.panel1, 1, 0); this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(2); this.tableLayoutPanel1.Name = "tableLayoutPanel1"; this.tableLayoutPanel1.RowCount = 5; this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 36F)); @@ -192,12 +193,13 @@ // panel1 // this.tableLayoutPanel1.SetColumnSpan(this.panel1, 4); + this.panel1.Controls.Add(this.checkbox2); this.panel1.Controls.Add(this.label1); this.panel1.Controls.Add(this.numericUpDown1); this.panel1.Controls.Add(this.checkbox1); this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; this.panel1.Location = new System.Drawing.Point(84, 2); - this.panel1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.panel1.Margin = new System.Windows.Forms.Padding(2); this.panel1.Name = "panel1"; this.tableLayoutPanel1.SetRowSpan(this.panel1, 4); this.panel1.Size = new System.Drawing.Size(160, 140); @@ -208,7 +210,7 @@ // this.label1.Font = new System.Drawing.Font("宋体", 7.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.label1.Location = new System.Drawing.Point(2, 40); - this.label1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.label1.Margin = new System.Windows.Forms.Padding(2); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(114, 25); this.label1.TabIndex = 7; @@ -217,7 +219,7 @@ // numericUpDown1 // this.numericUpDown1.Location = new System.Drawing.Point(2, 69); - this.numericUpDown1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.numericUpDown1.Margin = new System.Windows.Forms.Padding(2); this.numericUpDown1.Name = "numericUpDown1"; this.numericUpDown1.Size = new System.Drawing.Size(57, 21); this.numericUpDown1.TabIndex = 6; @@ -226,7 +228,7 @@ // this.checkbox1.AutoCheck = true; this.checkbox1.Location = new System.Drawing.Point(2, 11); - this.checkbox1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.checkbox1.Margin = new System.Windows.Forms.Padding(2); this.checkbox1.Name = "checkbox1"; this.checkbox1.Size = new System.Drawing.Size(106, 18); this.checkbox1.TabIndex = 0; @@ -237,7 +239,7 @@ this.clasi_init.Controls.Add(this.materialCheckbox1); this.clasi_init.Expand = true; this.clasi_init.Location = new System.Drawing.Point(18, 305); - this.clasi_init.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.clasi_init.Margin = new System.Windows.Forms.Padding(2); this.clasi_init.Name = "clasi_init"; this.clasi_init.Size = new System.Drawing.Size(268, 162); this.clasi_init.TabIndex = 1; @@ -262,7 +264,7 @@ // clasi_strips // this.clasi_strips.Location = new System.Drawing.Point(-75, -48); - this.clasi_strips.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.clasi_strips.Margin = new System.Windows.Forms.Padding(2); this.clasi_strips.Name = "clasi_strips"; this.clasi_strips.Size = new System.Drawing.Size(75, 48); this.clasi_strips.TabIndex = 2; @@ -271,12 +273,22 @@ // clasi_conformity // this.clasi_conformity.Location = new System.Drawing.Point(-75, -48); - this.clasi_conformity.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.clasi_conformity.Margin = new System.Windows.Forms.Padding(2); this.clasi_conformity.Name = "clasi_conformity"; this.clasi_conformity.Size = new System.Drawing.Size(75, 48); this.clasi_conformity.TabIndex = 3; this.clasi_conformity.Text = "整合"; // + // checkbox2 + // + this.checkbox2.AutoCheck = true; + this.checkbox2.Location = new System.Drawing.Point(0, 111); + this.checkbox2.Margin = new System.Windows.Forms.Padding(2); + this.checkbox2.Name = "checkbox2"; + this.checkbox2.Size = new System.Drawing.Size(106, 18); + this.checkbox2.TabIndex = 8; + this.checkbox2.Text = "总是显示泳道"; + // // LanesImagePaletteForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); @@ -284,7 +296,7 @@ this.ClientSize = new System.Drawing.Size(304, 495); this.Controls.Add(this.collapse1); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; - this.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.Margin = new System.Windows.Forms.Padding(2); this.Name = "LanesImagePaletteForm"; this.Text = "BioanayImagePaletteForm"; this.collapse1.ResumeLayout(false); @@ -316,5 +328,6 @@ private AntdUI.Checkbox checkbox1; private AntdUI.Label label1; public MaterialSkin.Controls.MaterialButton mb_findLanes; + private AntdUI.Checkbox checkbox2; } } \ No newline at end of file diff --git a/src/PBAnaly/UI/LanesImagePanel.Designer.cs b/src/PBAnaly/UI/LanesImagePanel.Designer.cs index 3c7f242..20b708f 100644 --- a/src/PBAnaly/UI/LanesImagePanel.Designer.cs +++ b/src/PBAnaly/UI/LanesImagePanel.Designer.cs @@ -32,6 +32,8 @@ this.wdb_title = new AntdUI.WindowBar(); this.panel1 = new AntdUI.Panel(); this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.panel2 = new AntdUI.Panel(); + this.lb_imageIndex = new AntdUI.Label(); this.flowPanel1 = new AntdUI.FlowPanel(); this.ava_saveReport = new AntdUI.Avatar(); this.ava_save = new AntdUI.Avatar(); @@ -51,10 +53,9 @@ this.ctms_strop_copy = new System.Windows.Forms.ToolStripMenuItem(); this.ctms_strop_stickup = new System.Windows.Forms.ToolStripMenuItem(); this.ctms_strop_delete = new System.Windows.Forms.ToolStripMenuItem(); - this.lb_imageIndex = new AntdUI.Label(); - this.panel2 = new AntdUI.Panel(); this.panel1.SuspendLayout(); this.tableLayoutPanel1.SuspendLayout(); + this.panel2.SuspendLayout(); this.flowPanel1.SuspendLayout(); this.pl_bottom.SuspendLayout(); this.tlp_bottom_panel.SuspendLayout(); @@ -63,7 +64,6 @@ this.pl_bg_panel.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.image_pl)).BeginInit(); this.ctms_strop.SuspendLayout(); - this.panel2.SuspendLayout(); this.SuspendLayout(); // // wdb_title @@ -72,12 +72,11 @@ this.wdb_title.Dock = System.Windows.Forms.DockStyle.Top; this.wdb_title.ForeColor = System.Drawing.SystemColors.ButtonFace; this.wdb_title.IsMax = false; - this.wdb_title.Location = new System.Drawing.Point(4, 4); - this.wdb_title.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.wdb_title.Location = new System.Drawing.Point(3, 3); this.wdb_title.MinimizeBox = false; this.wdb_title.Name = "wdb_title"; this.wdb_title.ShowIcon = false; - this.wdb_title.Size = new System.Drawing.Size(469, 29); + this.wdb_title.Size = new System.Drawing.Size(352, 23); this.wdb_title.TabIndex = 0; this.wdb_title.Text = " "; this.wdb_title.UseSystemStyleColor = true; @@ -86,43 +85,67 @@ // this.panel1.Controls.Add(this.tableLayoutPanel1); this.panel1.Dock = System.Windows.Forms.DockStyle.Top; - this.panel1.Location = new System.Drawing.Point(4, 33); - this.panel1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.panel1.Location = new System.Drawing.Point(3, 26); this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(469, 29); + this.panel1.Size = new System.Drawing.Size(352, 23); this.panel1.TabIndex = 1; this.panel1.Text = "panel1"; // // tableLayoutPanel1 // this.tableLayoutPanel1.ColumnCount = 4; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 175F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 92F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 131F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 34F)); 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, 167F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 149F)); this.tableLayoutPanel1.Controls.Add(this.panel2, 0, 0); this.tableLayoutPanel1.Controls.Add(this.flowPanel1, 3, 0); - this.tableLayoutPanel1.Controls.Add(this.ava_auto, 2, 0); this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); this.tableLayoutPanel1.Name = "tableLayoutPanel1"; this.tableLayoutPanel1.RowCount = 1; this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(469, 29); + this.tableLayoutPanel1.Size = new System.Drawing.Size(352, 23); this.tableLayoutPanel1.TabIndex = 0; // + // panel2 + // + this.panel2.Back = System.Drawing.SystemColors.Control; + this.panel2.Controls.Add(this.lb_imageIndex); + this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel2.Location = new System.Drawing.Point(0, 0); + this.panel2.Margin = new System.Windows.Forms.Padding(0); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(131, 23); + this.panel2.TabIndex = 0; + this.panel2.Text = "panel2"; + // + // lb_imageIndex + // + this.lb_imageIndex.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.lb_imageIndex.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lb_imageIndex.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(83)))), ((int)(((byte)(36))))); + this.lb_imageIndex.Location = new System.Drawing.Point(3, 0); + this.lb_imageIndex.Name = "lb_imageIndex"; + this.lb_imageIndex.Size = new System.Drawing.Size(27, 23); + this.lb_imageIndex.TabIndex = 0; + this.lb_imageIndex.Text = "0"; + this.lb_imageIndex.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // // flowPanel1 // - this.flowPanel1.Controls.Add(this.ava_saveReport); + this.flowPanel1.BadgeAlign = AntdUI.TAlignFrom.TL; this.flowPanel1.Controls.Add(this.ava_save); + this.flowPanel1.Controls.Add(this.ava_saveReport); + this.flowPanel1.Controls.Add(this.ava_auto); this.flowPanel1.Controls.Add(this.ava_zoom_out); this.flowPanel1.Controls.Add(this.ava__zoom_in); this.flowPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.flowPanel1.Location = new System.Drawing.Point(302, 0); + this.flowPanel1.Location = new System.Drawing.Point(203, 0); this.flowPanel1.Margin = new System.Windows.Forms.Padding(0); this.flowPanel1.Name = "flowPanel1"; - this.flowPanel1.Size = new System.Drawing.Size(167, 29); + this.flowPanel1.Size = new System.Drawing.Size(149, 23); this.flowPanel1.TabIndex = 2; this.flowPanel1.Text = "flowPanel1"; // @@ -131,10 +154,9 @@ this.ava_saveReport.Cursor = System.Windows.Forms.Cursors.Hand; this.ava_saveReport.Image = global::PBAnaly.Properties.Resources.数据报告__1_; this.ava_saveReport.ImageFit = AntdUI.TFit.Contain; - this.ava_saveReport.Location = new System.Drawing.Point(127, 4); - this.ava_saveReport.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.ava_saveReport.Location = new System.Drawing.Point(91, 3); this.ava_saveReport.Name = "ava_saveReport"; - this.ava_saveReport.Size = new System.Drawing.Size(28, 21); + this.ava_saveReport.Size = new System.Drawing.Size(21, 17); this.ava_saveReport.TabIndex = 7; this.ava_saveReport.Text = "a"; // @@ -143,10 +165,9 @@ this.ava_save.Cursor = System.Windows.Forms.Cursors.Hand; this.ava_save.Image = global::PBAnaly.Properties.Resources.保存图片; this.ava_save.ImageFit = AntdUI.TFit.Contain; - this.ava_save.Location = new System.Drawing.Point(86, 4); - this.ava_save.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.ava_save.Location = new System.Drawing.Point(118, 3); this.ava_save.Name = "ava_save"; - this.ava_save.Size = new System.Drawing.Size(33, 21); + this.ava_save.Size = new System.Drawing.Size(23, 17); this.ava_save.TabIndex = 6; this.ava_save.Text = "a"; this.ava_save.Click += new System.EventHandler(this.ava_save_Click); @@ -156,10 +177,9 @@ this.ava_zoom_out.Cursor = System.Windows.Forms.Cursors.Hand; this.ava_zoom_out.Image = global::PBAnaly.Properties.Resources.缩小; this.ava_zoom_out.ImageFit = AntdUI.TFit.Contain; - this.ava_zoom_out.Location = new System.Drawing.Point(45, 4); - this.ava_zoom_out.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.ava_zoom_out.Location = new System.Drawing.Point(34, 3); this.ava_zoom_out.Name = "ava_zoom_out"; - this.ava_zoom_out.Size = new System.Drawing.Size(33, 21); + this.ava_zoom_out.Size = new System.Drawing.Size(25, 17); this.ava_zoom_out.TabIndex = 5; this.ava_zoom_out.Text = "a"; this.ava_zoom_out.Click += new System.EventHandler(this.ava_zoom_out_Click); @@ -169,10 +189,9 @@ this.ava__zoom_in.Cursor = System.Windows.Forms.Cursors.Hand; this.ava__zoom_in.Image = global::PBAnaly.Properties.Resources.放大; this.ava__zoom_in.ImageFit = AntdUI.TFit.Contain; - this.ava__zoom_in.Location = new System.Drawing.Point(4, 4); - this.ava__zoom_in.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.ava__zoom_in.Location = new System.Drawing.Point(3, 3); this.ava__zoom_in.Name = "ava__zoom_in"; - this.ava__zoom_in.Size = new System.Drawing.Size(33, 21); + this.ava__zoom_in.Size = new System.Drawing.Size(25, 17); this.ava__zoom_in.TabIndex = 4; this.ava__zoom_in.Text = ""; this.ava__zoom_in.Click += new System.EventHandler(this.ava__zoom_in_Click); @@ -183,10 +202,9 @@ this.ava_auto.HandCursor = System.Windows.Forms.Cursors.IBeam; this.ava_auto.Image = global::PBAnaly.Properties.Resources.全屏; this.ava_auto.ImageFit = AntdUI.TFit.Contain; - this.ava_auto.Location = new System.Drawing.Point(271, 4); - this.ava_auto.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.ava_auto.Location = new System.Drawing.Point(65, 3); this.ava_auto.Name = "ava_auto"; - this.ava_auto.Size = new System.Drawing.Size(27, 21); + this.ava_auto.Size = new System.Drawing.Size(20, 17); this.ava_auto.TabIndex = 3; this.ava_auto.Text = "a"; this.ava_auto.Click += new System.EventHandler(this.ava_auto_Click); @@ -196,10 +214,9 @@ this.pl_bottom.BackColor = System.Drawing.SystemColors.ActiveCaptionText; this.pl_bottom.Controls.Add(this.tlp_bottom_panel); this.pl_bottom.Dock = System.Windows.Forms.DockStyle.Bottom; - this.pl_bottom.Location = new System.Drawing.Point(4, 365); - this.pl_bottom.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.pl_bottom.Location = new System.Drawing.Point(3, 292); this.pl_bottom.Name = "pl_bottom"; - this.pl_bottom.Size = new System.Drawing.Size(469, 16); + this.pl_bottom.Size = new System.Drawing.Size(352, 13); this.pl_bottom.TabIndex = 2; this.pl_bottom.Text = "panel3"; // @@ -215,11 +232,10 @@ this.tlp_bottom_panel.Controls.Add(this.lb_size, 4, 0); this.tlp_bottom_panel.Dock = System.Windows.Forms.DockStyle.Fill; this.tlp_bottom_panel.Location = new System.Drawing.Point(0, 0); - this.tlp_bottom_panel.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); this.tlp_bottom_panel.Name = "tlp_bottom_panel"; this.tlp_bottom_panel.RowCount = 1; this.tlp_bottom_panel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tlp_bottom_panel.Size = new System.Drawing.Size(469, 16); + this.tlp_bottom_panel.Size = new System.Drawing.Size(352, 13); this.tlp_bottom_panel.TabIndex = 1; // // lb_name @@ -230,7 +246,7 @@ this.lb_name.Location = new System.Drawing.Point(0, 0); this.lb_name.Margin = new System.Windows.Forms.Padding(0); this.lb_name.Name = "lb_name"; - this.lb_name.Size = new System.Drawing.Size(465, 16); + this.lb_name.Size = new System.Drawing.Size(348, 13); this.lb_name.TabIndex = 1; this.lb_name.Text = "800x600"; // @@ -239,10 +255,10 @@ this.lb_size.BackColor = System.Drawing.Color.Transparent; this.lb_size.Dock = System.Windows.Forms.DockStyle.Fill; this.lb_size.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(237)))), ((int)(((byte)(237)))), ((int)(((byte)(237))))); - this.lb_size.Location = new System.Drawing.Point(468, 0); + this.lb_size.Location = new System.Drawing.Point(351, 0); this.lb_size.Margin = new System.Windows.Forms.Padding(0); this.lb_size.Name = "lb_size"; - this.lb_size.Size = new System.Drawing.Size(1, 16); + this.lb_size.Size = new System.Drawing.Size(1, 13); this.lb_size.TabIndex = 0; this.lb_size.Text = "800x600"; this.lb_size.TextAlign = System.Drawing.ContentAlignment.MiddleRight; @@ -255,12 +271,11 @@ this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 2F)); this.tableLayoutPanel2.Controls.Add(this.pl_panel_image, 0, 0); this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel2.Location = new System.Drawing.Point(4, 62); - this.tableLayoutPanel2.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.tableLayoutPanel2.Location = new System.Drawing.Point(3, 49); this.tableLayoutPanel2.Name = "tableLayoutPanel2"; this.tableLayoutPanel2.RowCount = 1; this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel2.Size = new System.Drawing.Size(469, 303); + this.tableLayoutPanel2.Size = new System.Drawing.Size(352, 243); this.tableLayoutPanel2.TabIndex = 3; // // pl_panel_image @@ -275,11 +290,10 @@ this.pl_panel_image.BorderWidth = 5F; this.pl_panel_image.Controls.Add(this.pl_bg_panel); this.pl_panel_image.Dock = System.Windows.Forms.DockStyle.Fill; - this.pl_panel_image.Location = new System.Drawing.Point(4, 4); - this.pl_panel_image.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.pl_panel_image.Location = new System.Drawing.Point(3, 3); this.pl_panel_image.Name = "pl_panel_image"; - this.pl_panel_image.Padding = new System.Windows.Forms.Padding(7, 6, 7, 6); - this.pl_panel_image.Size = new System.Drawing.Size(459, 295); + this.pl_panel_image.Padding = new System.Windows.Forms.Padding(5, 5, 5, 5); + this.pl_panel_image.Size = new System.Drawing.Size(344, 237); this.pl_panel_image.TabIndex = 0; this.pl_panel_image.Text = "panel4"; // @@ -287,9 +301,8 @@ // this.pl_bg_panel.Controls.Add(this.image_pl); this.pl_bg_panel.Location = new System.Drawing.Point(0, 0); - this.pl_bg_panel.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); this.pl_bg_panel.Name = "pl_bg_panel"; - this.pl_bg_panel.Size = new System.Drawing.Size(297, 231); + this.pl_bg_panel.Size = new System.Drawing.Size(223, 185); this.pl_bg_panel.TabIndex = 0; this.pl_bg_panel.Text = "panel4"; // @@ -298,9 +311,8 @@ this.image_pl.ContextMenuStrip = this.ctms_strop; this.image_pl.Dock = System.Windows.Forms.DockStyle.Fill; this.image_pl.Location = new System.Drawing.Point(0, 0); - this.image_pl.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); this.image_pl.Name = "image_pl"; - this.image_pl.Size = new System.Drawing.Size(297, 231); + this.image_pl.Size = new System.Drawing.Size(223, 185); this.image_pl.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; this.image_pl.TabIndex = 0; this.image_pl.TabStop = false; @@ -314,75 +326,49 @@ this.ctms_strop_stickup, this.ctms_strop_delete}); this.ctms_strop.Name = "ctms_strop"; - this.ctms_strop.Size = new System.Drawing.Size(109, 82); + this.ctms_strop.Size = new System.Drawing.Size(101, 76); // // toolStripSeparator1 // this.toolStripSeparator1.Name = "toolStripSeparator1"; - this.toolStripSeparator1.Size = new System.Drawing.Size(105, 6); + this.toolStripSeparator1.Size = new System.Drawing.Size(97, 6); // // ctms_strop_copy // this.ctms_strop_copy.Name = "ctms_strop_copy"; - this.ctms_strop_copy.Size = new System.Drawing.Size(108, 24); + this.ctms_strop_copy.Size = new System.Drawing.Size(100, 22); this.ctms_strop_copy.Text = "复制"; // // ctms_strop_stickup // this.ctms_strop_stickup.Name = "ctms_strop_stickup"; - this.ctms_strop_stickup.Size = new System.Drawing.Size(108, 24); + this.ctms_strop_stickup.Size = new System.Drawing.Size(100, 22); this.ctms_strop_stickup.Text = "粘贴"; // // ctms_strop_delete // this.ctms_strop_delete.Name = "ctms_strop_delete"; - this.ctms_strop_delete.Size = new System.Drawing.Size(108, 24); + this.ctms_strop_delete.Size = new System.Drawing.Size(100, 22); this.ctms_strop_delete.Text = "删除"; // - // lb_imageIndex - // - this.lb_imageIndex.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left))); - this.lb_imageIndex.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.lb_imageIndex.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(83)))), ((int)(((byte)(36))))); - this.lb_imageIndex.Location = new System.Drawing.Point(4, 0); - this.lb_imageIndex.Margin = new System.Windows.Forms.Padding(4); - this.lb_imageIndex.Name = "lb_imageIndex"; - this.lb_imageIndex.Size = new System.Drawing.Size(36, 29); - this.lb_imageIndex.TabIndex = 0; - this.lb_imageIndex.Text = "0"; - this.lb_imageIndex.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - // - // panel2 - // - this.panel2.Back = System.Drawing.SystemColors.Control; - this.panel2.Controls.Add(this.lb_imageIndex); - this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel2.Location = new System.Drawing.Point(0, 0); - this.panel2.Margin = new System.Windows.Forms.Padding(0); - this.panel2.Name = "panel2"; - this.panel2.Size = new System.Drawing.Size(175, 29); - this.panel2.TabIndex = 0; - this.panel2.Text = "panel2"; - // // LanesImagePanel // - this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F); + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(477, 385); + this.ClientSize = new System.Drawing.Size(358, 308); this.Controls.Add(this.tableLayoutPanel2); this.Controls.Add(this.pl_bottom); this.Controls.Add(this.panel1); this.Controls.Add(this.wdb_title); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; - this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); this.Name = "LanesImagePanel"; - this.Padding = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.Padding = new System.Windows.Forms.Padding(3, 3, 3, 3); this.Text = "BioanalyImagePanel"; this.SizeChanged += new System.EventHandler(this.BioanalyImagePanel_SizeChanged); this.MouseEnter += new System.EventHandler(this.BioanalyImagePanel_MouseEnter); this.panel1.ResumeLayout(false); this.tableLayoutPanel1.ResumeLayout(false); + this.panel2.ResumeLayout(false); this.flowPanel1.ResumeLayout(false); this.pl_bottom.ResumeLayout(false); this.tlp_bottom_panel.ResumeLayout(false); @@ -391,7 +377,6 @@ this.pl_bg_panel.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.image_pl)).EndInit(); this.ctms_strop.ResumeLayout(false); - this.panel2.ResumeLayout(false); this.ResumeLayout(false); } From 2c6997ec99018d466a520f5bc4d0da60b80f9c31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=BF=E4=B8=9C=E4=BA=9A?= Date: Fri, 3 Jan 2025 19:04:03 +0800 Subject: [PATCH 5/8] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=8F=8C=E8=90=BD?= =?UTF-8?q?=E8=AE=A1=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/PBAnaly/LaneChartForm.Designer.cs | 64 +- src/PBAnaly/MainForm.Designer.cs | 169 ++--- src/PBAnaly/MainForm.cs | 49 +- src/PBAnaly/MainForm.resx | 898 +++++++++++++------------- src/PBAnaly/Module/ColonyMannage.cs | 127 ++++ src/PBAnaly/Module/util.cs | 28 + src/PBAnaly/PBAnaly.csproj | 1 + src/PBBiologyVC/PBColonyVC.cpp | 79 +-- src/PBBiologyVC/PBColonyVC.h | 62 +- 9 files changed, 869 insertions(+), 608 deletions(-) create mode 100644 src/PBAnaly/Module/ColonyMannage.cs diff --git a/src/PBAnaly/LaneChartForm.Designer.cs b/src/PBAnaly/LaneChartForm.Designer.cs index 4b42075..99706b4 100644 --- a/src/PBAnaly/LaneChartForm.Designer.cs +++ b/src/PBAnaly/LaneChartForm.Designer.cs @@ -28,13 +28,13 @@ /// private void InitializeComponent() { - System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea2 = new System.Windows.Forms.DataVisualization.Charting.ChartArea(); - System.Windows.Forms.DataVisualization.Charting.Legend legend2 = new System.Windows.Forms.DataVisualization.Charting.Legend(); - System.Windows.Forms.DataVisualization.Charting.Series series2 = new System.Windows.Forms.DataVisualization.Charting.Series(); - System.Windows.Forms.DataVisualization.Charting.DataPoint dataPoint5 = new System.Windows.Forms.DataVisualization.Charting.DataPoint(1D, 5D); - System.Windows.Forms.DataVisualization.Charting.DataPoint dataPoint6 = new System.Windows.Forms.DataVisualization.Charting.DataPoint(1.5D, 5D); - System.Windows.Forms.DataVisualization.Charting.DataPoint dataPoint7 = new System.Windows.Forms.DataVisualization.Charting.DataPoint(1.9D, 8D); - System.Windows.Forms.DataVisualization.Charting.DataPoint dataPoint8 = new System.Windows.Forms.DataVisualization.Charting.DataPoint(0D, 0D); + System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea(); + System.Windows.Forms.DataVisualization.Charting.Legend legend1 = new System.Windows.Forms.DataVisualization.Charting.Legend(); + System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series(); + System.Windows.Forms.DataVisualization.Charting.DataPoint dataPoint1 = new System.Windows.Forms.DataVisualization.Charting.DataPoint(1D, 5D); + System.Windows.Forms.DataVisualization.Charting.DataPoint dataPoint2 = new System.Windows.Forms.DataVisualization.Charting.DataPoint(1.5D, 5D); + System.Windows.Forms.DataVisualization.Charting.DataPoint dataPoint3 = new System.Windows.Forms.DataVisualization.Charting.DataPoint(1.9D, 8D); + System.Windows.Forms.DataVisualization.Charting.DataPoint dataPoint4 = new System.Windows.Forms.DataVisualization.Charting.DataPoint(0D, 0D); this.menuStrip1 = new System.Windows.Forms.MenuStrip(); this.文件ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.选项ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -49,46 +49,46 @@ this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.文件ToolStripMenuItem, this.选项ToolStripMenuItem}); - this.menuStrip1.Location = new System.Drawing.Point(3, 24); + this.menuStrip1.Location = new System.Drawing.Point(4, 30); this.menuStrip1.Name = "menuStrip1"; - this.menuStrip1.Padding = new System.Windows.Forms.Padding(4, 2, 0, 2); - this.menuStrip1.Size = new System.Drawing.Size(899, 25); + this.menuStrip1.Padding = new System.Windows.Forms.Padding(5, 2, 0, 2); + this.menuStrip1.Size = new System.Drawing.Size(1199, 30); this.menuStrip1.TabIndex = 0; this.menuStrip1.Text = "menuStrip1"; // // 文件ToolStripMenuItem // this.文件ToolStripMenuItem.Name = "文件ToolStripMenuItem"; - this.文件ToolStripMenuItem.Size = new System.Drawing.Size(44, 21); + this.文件ToolStripMenuItem.Size = new System.Drawing.Size(53, 26); this.文件ToolStripMenuItem.Text = "文件"; // // 选项ToolStripMenuItem // this.选项ToolStripMenuItem.Name = "选项ToolStripMenuItem"; - this.选项ToolStripMenuItem.Size = new System.Drawing.Size(44, 21); + this.选项ToolStripMenuItem.Size = new System.Drawing.Size(53, 26); this.选项ToolStripMenuItem.Text = "选项"; // // chart1 // - chartArea2.Name = "ChartArea1"; - this.chart1.ChartAreas.Add(chartArea2); + chartArea1.Name = "ChartArea1"; + this.chart1.ChartAreas.Add(chartArea1); this.chart1.Dock = System.Windows.Forms.DockStyle.Fill; - legend2.Name = "Legend1"; - this.chart1.Legends.Add(legend2); - this.chart1.Location = new System.Drawing.Point(3, 49); - this.chart1.Margin = new System.Windows.Forms.Padding(2); + legend1.Name = "Legend1"; + this.chart1.Legends.Add(legend1); + this.chart1.Location = new System.Drawing.Point(4, 60); + this.chart1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.chart1.Name = "chart1"; this.chart1.Palette = System.Windows.Forms.DataVisualization.Charting.ChartColorPalette.Bright; - series2.ChartArea = "ChartArea1"; - series2.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.FastLine; - series2.Legend = "Legend1"; - series2.Name = "Series1"; - series2.Points.Add(dataPoint5); - series2.Points.Add(dataPoint6); - series2.Points.Add(dataPoint7); - series2.Points.Add(dataPoint8); - this.chart1.Series.Add(series2); - this.chart1.Size = new System.Drawing.Size(899, 366); + series1.ChartArea = "ChartArea1"; + series1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.FastLine; + series1.Legend = "Legend1"; + series1.Name = "Series1"; + series1.Points.Add(dataPoint1); + series1.Points.Add(dataPoint2); + series1.Points.Add(dataPoint3); + series1.Points.Add(dataPoint4); + this.chart1.Series.Add(series1); + this.chart1.Size = new System.Drawing.Size(1199, 458); this.chart1.TabIndex = 1; this.chart1.Text = "chart1"; this.chart1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.chart1_MouseDown); @@ -96,17 +96,17 @@ // // LaneChartForm // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(905, 418); + this.ClientSize = new System.Drawing.Size(1207, 522); this.Controls.Add(this.chart1); this.Controls.Add(this.menuStrip1); this.DrawerAutoShow = true; this.FormStyle = MaterialSkin.Controls.MaterialForm.FormStyles.ActionBar_None; this.MainMenuStrip = this.menuStrip1; - this.Margin = new System.Windows.Forms.Padding(2); + this.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.Name = "LaneChartForm"; - this.Padding = new System.Windows.Forms.Padding(3, 24, 3, 3); + this.Padding = new System.Windows.Forms.Padding(4, 30, 4, 4); this.Text = "LaneChartForm"; this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.LaneChartForm_FormClosing); this.menuStrip1.ResumeLayout(false); diff --git a/src/PBAnaly/MainForm.Designer.cs b/src/PBAnaly/MainForm.Designer.cs index e0ce7bb..629ba7c 100644 --- a/src/PBAnaly/MainForm.Designer.cs +++ b/src/PBAnaly/MainForm.Designer.cs @@ -47,7 +47,7 @@ this.materialButton_acidAnalyze = new MaterialSkin.Controls.MaterialButton(); this.materialButton_roiAnalyze = new MaterialSkin.Controls.MaterialButton(); this.materialButton_miniAnalyze = new MaterialSkin.Controls.MaterialButton(); - this.materialButton_dotcounts = new MaterialSkin.Controls.MaterialButton(); + this.mb_colonyCount = new MaterialSkin.Controls.MaterialButton(); this.materialButton_correction = new MaterialSkin.Controls.MaterialButton(); this.flowLayoutPanel2 = new AntdUI.In.FlowLayoutPanel(); this.materialButton_changeFormSize = new MaterialSkin.Controls.MaterialButton(); @@ -81,17 +81,17 @@ this.metroPanel_RightTop.Dock = System.Windows.Forms.DockStyle.Fill; this.metroPanel_RightTop.HorizontalScrollbarBarColor = true; this.metroPanel_RightTop.HorizontalScrollbarHighlightOnWheel = false; - this.metroPanel_RightTop.HorizontalScrollbarSize = 7; - this.metroPanel_RightTop.Location = new System.Drawing.Point(210, 0); + this.metroPanel_RightTop.HorizontalScrollbarSize = 9; + this.metroPanel_RightTop.Location = new System.Drawing.Point(280, 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(759, 69); this.metroPanel_RightTop.TabIndex = 12; this.metroPanel_RightTop.Theme = MetroFramework.MetroThemeStyle.Dark; this.metroPanel_RightTop.UseCustomBackColor = true; this.metroPanel_RightTop.VerticalScrollbarBarColor = true; this.metroPanel_RightTop.VerticalScrollbarHighlightOnWheel = false; - this.metroPanel_RightTop.VerticalScrollbarSize = 7; + this.metroPanel_RightTop.VerticalScrollbarSize = 9; // // materialButton_log // @@ -102,11 +102,11 @@ this.materialButton_log.HighEmphasis = true; this.materialButton_log.Icon = ((System.Drawing.Image)(resources.GetObject("materialButton_log.Icon"))); this.materialButton_log.Location = new System.Drawing.Point(581, 0); - this.materialButton_log.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.materialButton_log.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); this.materialButton_log.MouseState = MaterialSkin.MouseState.HOVER; this.materialButton_log.Name = "materialButton_log"; this.materialButton_log.NoAccentTextColor = System.Drawing.Color.Empty; - this.materialButton_log.Size = new System.Drawing.Size(113, 55); + this.materialButton_log.Size = new System.Drawing.Size(113, 69); this.materialButton_log.TabIndex = 19; this.materialButton_log.Text = "操作日志"; this.materialButton_log.Type = MaterialSkin.Controls.MaterialButton.MaterialButtonType.Contained; @@ -123,11 +123,11 @@ this.materialButton_setting.HighEmphasis = true; this.materialButton_setting.Icon = ((System.Drawing.Image)(resources.GetObject("materialButton_setting.Icon"))); this.materialButton_setting.Location = new System.Drawing.Point(468, 0); - this.materialButton_setting.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.materialButton_setting.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); this.materialButton_setting.MouseState = MaterialSkin.MouseState.HOVER; this.materialButton_setting.Name = "materialButton_setting"; this.materialButton_setting.NoAccentTextColor = System.Drawing.Color.Empty; - this.materialButton_setting.Size = new System.Drawing.Size(113, 55); + this.materialButton_setting.Size = new System.Drawing.Size(113, 69); this.materialButton_setting.TabIndex = 18; this.materialButton_setting.Text = "系统设置"; this.materialButton_setting.Type = MaterialSkin.Controls.MaterialButton.MaterialButtonType.Contained; @@ -145,11 +145,11 @@ this.materialButton_curveimage.HighEmphasis = true; this.materialButton_curveimage.Icon = ((System.Drawing.Image)(resources.GetObject("materialButton_curveimage.Icon"))); this.materialButton_curveimage.Location = new System.Drawing.Point(339, 0); - this.materialButton_curveimage.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.materialButton_curveimage.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); this.materialButton_curveimage.MouseState = MaterialSkin.MouseState.HOVER; this.materialButton_curveimage.Name = "materialButton_curveimage"; this.materialButton_curveimage.NoAccentTextColor = System.Drawing.Color.Empty; - this.materialButton_curveimage.Size = new System.Drawing.Size(129, 55); + this.materialButton_curveimage.Size = new System.Drawing.Size(129, 69); this.materialButton_curveimage.TabIndex = 17; this.materialButton_curveimage.Text = "泳道波形图"; this.materialButton_curveimage.Type = MaterialSkin.Controls.MaterialButton.MaterialButtonType.Contained; @@ -167,11 +167,11 @@ this.materialButton_analyzedata.HighEmphasis = true; this.materialButton_analyzedata.Icon = ((System.Drawing.Image)(resources.GetObject("materialButton_analyzedata.Icon"))); this.materialButton_analyzedata.Location = new System.Drawing.Point(226, 0); - this.materialButton_analyzedata.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.materialButton_analyzedata.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); this.materialButton_analyzedata.MouseState = MaterialSkin.MouseState.HOVER; this.materialButton_analyzedata.Name = "materialButton_analyzedata"; this.materialButton_analyzedata.NoAccentTextColor = System.Drawing.Color.Empty; - this.materialButton_analyzedata.Size = new System.Drawing.Size(113, 55); + this.materialButton_analyzedata.Size = new System.Drawing.Size(113, 69); this.materialButton_analyzedata.TabIndex = 16; this.materialButton_analyzedata.Text = "分析数据"; this.materialButton_analyzedata.Type = MaterialSkin.Controls.MaterialButton.MaterialButtonType.Contained; @@ -189,11 +189,11 @@ this.materialButton_outimage.HighEmphasis = true; this.materialButton_outimage.Icon = ((System.Drawing.Image)(resources.GetObject("materialButton_outimage.Icon"))); this.materialButton_outimage.Location = new System.Drawing.Point(113, 0); - this.materialButton_outimage.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.materialButton_outimage.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); this.materialButton_outimage.MouseState = MaterialSkin.MouseState.HOVER; this.materialButton_outimage.Name = "materialButton_outimage"; this.materialButton_outimage.NoAccentTextColor = System.Drawing.Color.Empty; - this.materialButton_outimage.Size = new System.Drawing.Size(113, 55); + this.materialButton_outimage.Size = new System.Drawing.Size(113, 69); this.materialButton_outimage.TabIndex = 15; this.materialButton_outimage.Text = "导出图像"; this.materialButton_outimage.Type = MaterialSkin.Controls.MaterialButton.MaterialButtonType.Contained; @@ -211,11 +211,11 @@ this.materialButton_LoadData.HighEmphasis = true; this.materialButton_LoadData.Icon = ((System.Drawing.Image)(resources.GetObject("materialButton_LoadData.Icon"))); this.materialButton_LoadData.Location = new System.Drawing.Point(0, 0); - this.materialButton_LoadData.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.materialButton_LoadData.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); this.materialButton_LoadData.MouseState = MaterialSkin.MouseState.HOVER; this.materialButton_LoadData.Name = "materialButton_LoadData"; this.materialButton_LoadData.NoAccentTextColor = System.Drawing.Color.Empty; - this.materialButton_LoadData.Size = new System.Drawing.Size(113, 55); + this.materialButton_LoadData.Size = new System.Drawing.Size(113, 69); this.materialButton_LoadData.TabIndex = 14; this.materialButton_LoadData.Text = "加载数据"; this.materialButton_LoadData.Type = MaterialSkin.Controls.MaterialButton.MaterialButtonType.Contained; @@ -226,9 +226,9 @@ // tableLayoutPanel1 // 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.Absolute, 280F)); 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, 424F)); 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); @@ -236,30 +236,30 @@ this.tableLayoutPanel1.Controls.Add(this.flowLayoutPanel2, 1, 1); this.tableLayoutPanel1.Controls.Add(this.pl_right, 2, 1); this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 24); - this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(2); + this.tableLayoutPanel1.Location = new System.Drawing.Point(4, 30); + this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.tableLayoutPanel1.Name = "tableLayoutPanel1"; this.tableLayoutPanel1.RowCount = 3; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 55F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 31F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 69F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 39F)); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(1097, 581); + this.tableLayoutPanel1.Size = new System.Drawing.Size(1463, 726); this.tableLayoutPanel1.TabIndex = 18; // // tl_right_main_view // this.tl_right_main_view.ColumnCount = 2; this.tl_right_main_view.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tl_right_main_view.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 324F)); + this.tl_right_main_view.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 432F)); this.tl_right_main_view.Controls.Add(this.DataProcess_panel, 0, 0); this.tl_right_main_view.Dock = System.Windows.Forms.DockStyle.Fill; - this.tl_right_main_view.Location = new System.Drawing.Point(210, 86); + this.tl_right_main_view.Location = new System.Drawing.Point(280, 108); this.tl_right_main_view.Margin = new System.Windows.Forms.Padding(0); this.tl_right_main_view.Name = "tl_right_main_view"; 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(759, 618); this.tl_right_main_view.TabIndex = 0; // // DataProcess_panel @@ -268,11 +268,12 @@ this.tl_right_main_view.SetColumnSpan(this.DataProcess_panel, 2); this.DataProcess_panel.Dock = System.Windows.Forms.DockStyle.Fill; this.DataProcess_panel.EdgeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(41)))), ((int)(((byte)(50))))); - this.DataProcess_panel.Location = new System.Drawing.Point(3, 3); + this.DataProcess_panel.Location = new System.Drawing.Point(4, 4); + this.DataProcess_panel.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); this.DataProcess_panel.Name = "DataProcess_panel"; - this.DataProcess_panel.Padding = new System.Windows.Forms.Padding(5); + this.DataProcess_panel.Padding = new System.Windows.Forms.Padding(7, 6, 7, 6); 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(751, 610); this.DataProcess_panel.SmoothingType = System.Drawing.Drawing2D.SmoothingMode.HighQuality; this.DataProcess_panel.TabIndex = 19; this.DataProcess_panel.Text = "panel1"; @@ -283,10 +284,11 @@ this.CompanyIcon_pictureBox.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; this.CompanyIcon_pictureBox.Dock = System.Windows.Forms.DockStyle.Fill; this.CompanyIcon_pictureBox.Image = global::PBAnaly.Properties.Resources.京仪科技定稿_画板_1_副本2; - this.CompanyIcon_pictureBox.Location = new System.Drawing.Point(3, 3); + this.CompanyIcon_pictureBox.Location = new System.Drawing.Point(4, 4); + this.CompanyIcon_pictureBox.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); this.CompanyIcon_pictureBox.Name = "CompanyIcon_pictureBox"; this.tableLayoutPanel1.SetRowSpan(this.CompanyIcon_pictureBox, 2); - this.CompanyIcon_pictureBox.Size = new System.Drawing.Size(204, 80); + this.CompanyIcon_pictureBox.Size = new System.Drawing.Size(272, 100); this.CompanyIcon_pictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; this.CompanyIcon_pictureBox.TabIndex = 16; this.CompanyIcon_pictureBox.TabStop = false; @@ -297,14 +299,14 @@ this.flowLayoutPanel1.Controls.Add(this.materialButton_acidAnalyze); this.flowLayoutPanel1.Controls.Add(this.materialButton_roiAnalyze); this.flowLayoutPanel1.Controls.Add(this.materialButton_miniAnalyze); - this.flowLayoutPanel1.Controls.Add(this.materialButton_dotcounts); + this.flowLayoutPanel1.Controls.Add(this.mb_colonyCount); this.flowLayoutPanel1.Controls.Add(this.materialButton_correction); this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; this.flowLayoutPanel1.FlowDirection = System.Windows.Forms.FlowDirection.TopDown; - this.flowLayoutPanel1.Location = new System.Drawing.Point(2, 88); - this.flowLayoutPanel1.Margin = new System.Windows.Forms.Padding(2); + this.flowLayoutPanel1.Location = new System.Drawing.Point(3, 110); + this.flowLayoutPanel1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.flowLayoutPanel1.Name = "flowLayoutPanel1"; - this.flowLayoutPanel1.Size = new System.Drawing.Size(206, 491); + this.flowLayoutPanel1.Size = new System.Drawing.Size(274, 614); this.flowLayoutPanel1.TabIndex = 18; // // materialButton_imageProcess @@ -317,12 +319,12 @@ this.materialButton_imageProcess.Font = new System.Drawing.Font("宋体", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.materialButton_imageProcess.HighEmphasis = true; this.materialButton_imageProcess.Icon = ((System.Drawing.Image)(resources.GetObject("materialButton_imageProcess.Icon"))); - this.materialButton_imageProcess.Location = new System.Drawing.Point(4, 6); - this.materialButton_imageProcess.Margin = new System.Windows.Forms.Padding(4, 6, 4, 6); + this.materialButton_imageProcess.Location = new System.Drawing.Point(5, 8); + this.materialButton_imageProcess.Margin = new System.Windows.Forms.Padding(5, 8, 5, 8); this.materialButton_imageProcess.MouseState = MaterialSkin.MouseState.HOVER; this.materialButton_imageProcess.Name = "materialButton_imageProcess"; this.materialButton_imageProcess.NoAccentTextColor = System.Drawing.Color.Empty; - this.materialButton_imageProcess.Size = new System.Drawing.Size(200, 48); + this.materialButton_imageProcess.Size = new System.Drawing.Size(267, 60); this.materialButton_imageProcess.TabIndex = 4; this.materialButton_imageProcess.Text = "图像处理"; this.materialButton_imageProcess.TextAlign = System.Drawing.ContentAlignment.MiddleRight; @@ -339,12 +341,12 @@ this.materialButton_acidAnalyze.Depth = 0; this.materialButton_acidAnalyze.HighEmphasis = true; this.materialButton_acidAnalyze.Icon = ((System.Drawing.Image)(resources.GetObject("materialButton_acidAnalyze.Icon"))); - this.materialButton_acidAnalyze.Location = new System.Drawing.Point(4, 66); - this.materialButton_acidAnalyze.Margin = new System.Windows.Forms.Padding(4, 6, 4, 6); + this.materialButton_acidAnalyze.Location = new System.Drawing.Point(5, 84); + this.materialButton_acidAnalyze.Margin = new System.Windows.Forms.Padding(5, 8, 5, 8); this.materialButton_acidAnalyze.MouseState = MaterialSkin.MouseState.HOVER; this.materialButton_acidAnalyze.Name = "materialButton_acidAnalyze"; this.materialButton_acidAnalyze.NoAccentTextColor = System.Drawing.Color.Empty; - this.materialButton_acidAnalyze.Size = new System.Drawing.Size(200, 48); + this.materialButton_acidAnalyze.Size = new System.Drawing.Size(267, 60); this.materialButton_acidAnalyze.TabIndex = 5; this.materialButton_acidAnalyze.Text = "泳道分析"; this.materialButton_acidAnalyze.Type = MaterialSkin.Controls.MaterialButton.MaterialButtonType.Contained; @@ -360,12 +362,12 @@ this.materialButton_roiAnalyze.Depth = 0; this.materialButton_roiAnalyze.HighEmphasis = true; this.materialButton_roiAnalyze.Icon = ((System.Drawing.Image)(resources.GetObject("materialButton_roiAnalyze.Icon"))); - this.materialButton_roiAnalyze.Location = new System.Drawing.Point(4, 126); - this.materialButton_roiAnalyze.Margin = new System.Windows.Forms.Padding(4, 6, 4, 6); + this.materialButton_roiAnalyze.Location = new System.Drawing.Point(5, 160); + this.materialButton_roiAnalyze.Margin = new System.Windows.Forms.Padding(5, 8, 5, 8); this.materialButton_roiAnalyze.MouseState = MaterialSkin.MouseState.HOVER; this.materialButton_roiAnalyze.Name = "materialButton_roiAnalyze"; this.materialButton_roiAnalyze.NoAccentTextColor = System.Drawing.Color.Empty; - this.materialButton_roiAnalyze.Size = new System.Drawing.Size(200, 48); + this.materialButton_roiAnalyze.Size = new System.Drawing.Size(267, 60); this.materialButton_roiAnalyze.TabIndex = 6; this.materialButton_roiAnalyze.Text = "ROIs分析"; this.materialButton_roiAnalyze.Type = MaterialSkin.Controls.MaterialButton.MaterialButtonType.Contained; @@ -380,37 +382,38 @@ this.materialButton_miniAnalyze.Depth = 0; this.materialButton_miniAnalyze.HighEmphasis = true; this.materialButton_miniAnalyze.Icon = ((System.Drawing.Image)(resources.GetObject("materialButton_miniAnalyze.Icon"))); - this.materialButton_miniAnalyze.Location = new System.Drawing.Point(4, 186); - this.materialButton_miniAnalyze.Margin = new System.Windows.Forms.Padding(4, 6, 4, 6); + this.materialButton_miniAnalyze.Location = new System.Drawing.Point(5, 236); + this.materialButton_miniAnalyze.Margin = new System.Windows.Forms.Padding(5, 8, 5, 8); this.materialButton_miniAnalyze.MouseState = MaterialSkin.MouseState.HOVER; this.materialButton_miniAnalyze.Name = "materialButton_miniAnalyze"; this.materialButton_miniAnalyze.NoAccentTextColor = System.Drawing.Color.Empty; - this.materialButton_miniAnalyze.Size = new System.Drawing.Size(200, 48); + this.materialButton_miniAnalyze.Size = new System.Drawing.Size(267, 60); this.materialButton_miniAnalyze.TabIndex = 7; this.materialButton_miniAnalyze.Text = "微孔版分析"; this.materialButton_miniAnalyze.Type = MaterialSkin.Controls.MaterialButton.MaterialButtonType.Contained; this.materialButton_miniAnalyze.UseAccentColor = false; this.materialButton_miniAnalyze.UseVisualStyleBackColor = true; // - // materialButton_dotcounts + // mb_colonyCount // - this.materialButton_dotcounts.AutoSize = false; - this.materialButton_dotcounts.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.materialButton_dotcounts.Density = MaterialSkin.Controls.MaterialButton.MaterialButtonDensity.Default; - this.materialButton_dotcounts.Depth = 0; - this.materialButton_dotcounts.HighEmphasis = true; - this.materialButton_dotcounts.Icon = ((System.Drawing.Image)(resources.GetObject("materialButton_dotcounts.Icon"))); - this.materialButton_dotcounts.Location = new System.Drawing.Point(4, 246); - this.materialButton_dotcounts.Margin = new System.Windows.Forms.Padding(4, 6, 4, 6); - this.materialButton_dotcounts.MouseState = MaterialSkin.MouseState.HOVER; - this.materialButton_dotcounts.Name = "materialButton_dotcounts"; - this.materialButton_dotcounts.NoAccentTextColor = System.Drawing.Color.Empty; - this.materialButton_dotcounts.Size = new System.Drawing.Size(200, 48); - this.materialButton_dotcounts.TabIndex = 8; - this.materialButton_dotcounts.Text = "菌落计数"; - this.materialButton_dotcounts.Type = MaterialSkin.Controls.MaterialButton.MaterialButtonType.Contained; - this.materialButton_dotcounts.UseAccentColor = false; - this.materialButton_dotcounts.UseVisualStyleBackColor = true; + this.mb_colonyCount.AutoSize = false; + this.mb_colonyCount.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.mb_colonyCount.Density = MaterialSkin.Controls.MaterialButton.MaterialButtonDensity.Default; + this.mb_colonyCount.Depth = 0; + this.mb_colonyCount.HighEmphasis = true; + this.mb_colonyCount.Icon = ((System.Drawing.Image)(resources.GetObject("mb_colonyCount.Icon"))); + this.mb_colonyCount.Location = new System.Drawing.Point(5, 312); + this.mb_colonyCount.Margin = new System.Windows.Forms.Padding(5, 8, 5, 8); + this.mb_colonyCount.MouseState = MaterialSkin.MouseState.HOVER; + this.mb_colonyCount.Name = "mb_colonyCount"; + this.mb_colonyCount.NoAccentTextColor = System.Drawing.Color.Empty; + this.mb_colonyCount.Size = new System.Drawing.Size(267, 60); + this.mb_colonyCount.TabIndex = 8; + this.mb_colonyCount.Text = "菌落计数"; + this.mb_colonyCount.Type = MaterialSkin.Controls.MaterialButton.MaterialButtonType.Contained; + this.mb_colonyCount.UseAccentColor = false; + this.mb_colonyCount.UseVisualStyleBackColor = true; + this.mb_colonyCount.Click += new System.EventHandler(this.mb_colonyCount_Click); // // materialButton_correction // @@ -420,12 +423,12 @@ this.materialButton_correction.Depth = 0; this.materialButton_correction.HighEmphasis = true; this.materialButton_correction.Icon = ((System.Drawing.Image)(resources.GetObject("materialButton_correction.Icon"))); - this.materialButton_correction.Location = new System.Drawing.Point(4, 306); - this.materialButton_correction.Margin = new System.Windows.Forms.Padding(4, 6, 4, 6); + this.materialButton_correction.Location = new System.Drawing.Point(5, 388); + this.materialButton_correction.Margin = new System.Windows.Forms.Padding(5, 8, 5, 8); this.materialButton_correction.MouseState = MaterialSkin.MouseState.HOVER; this.materialButton_correction.Name = "materialButton_correction"; this.materialButton_correction.NoAccentTextColor = System.Drawing.Color.Empty; - this.materialButton_correction.Size = new System.Drawing.Size(200, 48); + this.materialButton_correction.Size = new System.Drawing.Size(267, 60); this.materialButton_correction.TabIndex = 9; this.materialButton_correction.Text = "蛋白归一化"; this.materialButton_correction.Type = MaterialSkin.Controls.MaterialButton.MaterialButtonType.Contained; @@ -445,10 +448,10 @@ this.flowLayoutPanel2.Controls.Add(this.materialButton_forward); this.flowLayoutPanel2.Controls.Add(this.materialButton_return); this.flowLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; - this.flowLayoutPanel2.Location = new System.Drawing.Point(210, 55); + this.flowLayoutPanel2.Location = new System.Drawing.Point(280, 69); 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(759, 39); this.flowLayoutPanel2.TabIndex = 19; // // materialButton_changeFormSize @@ -623,7 +626,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 +644,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.Margin = new System.Windows.Forms.Padding(2); + this.pl_right.Location = new System.Drawing.Point(1042, 71); + this.pl_right.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.pl_right.Name = "pl_right"; - this.pl_right.Padding = new System.Windows.Forms.Padding(4); + this.pl_right.Padding = new System.Windows.Forms.Padding(5, 5, 5, 5); 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(418, 653); this.pl_right.SmoothingType = System.Drawing.Drawing2D.SmoothingMode.HighQuality; this.pl_right.TabIndex = 20; this.pl_right.Text = "panel1"; @@ -655,26 +658,28 @@ // this.thunderLabel1.BackColor = System.Drawing.Color.Transparent; this.thunderLabel1.ForeColor = System.Drawing.Color.WhiteSmoke; - this.thunderLabel1.Location = new System.Drawing.Point(9, 5); + this.thunderLabel1.Location = new System.Drawing.Point(12, 6); + this.thunderLabel1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); this.thunderLabel1.Name = "thunderLabel1"; - this.thunderLabel1.Size = new System.Drawing.Size(200, 16); + this.thunderLabel1.Size = new System.Drawing.Size(267, 20); this.thunderLabel1.TabIndex = 19; this.thunderLabel1.Text = "PBAnaly v0.1.8"; // // MainForm // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; this.AutoValidate = System.Windows.Forms.AutoValidate.EnablePreventFocusChange; - this.ClientSize = new System.Drawing.Size(1103, 608); + this.ClientSize = new System.Drawing.Size(1471, 760); this.Controls.Add(this.thunderLabel1); this.Controls.Add(this.tableLayoutPanel1); this.DrawerAutoShow = true; this.FormStyle = MaterialSkin.Controls.MaterialForm.FormStyles.ActionBar_None; this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); this.Name = "MainForm"; - this.Padding = new System.Windows.Forms.Padding(3, 24, 3, 3); + this.Padding = new System.Windows.Forms.Padding(4, 30, 4, 4); this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "MainForm"; this.WindowState = System.Windows.Forms.FormWindowState.Maximized; @@ -712,7 +717,7 @@ private MaterialSkin.Controls.MaterialButton materialButton_imageChange; private MaterialSkin.Controls.MaterialButton materialButton_miniAnalyze; private MaterialSkin.Controls.MaterialButton materialButton_roiAnalyze; - private MaterialSkin.Controls.MaterialButton materialButton_dotcounts; + private MaterialSkin.Controls.MaterialButton mb_colonyCount; private MaterialSkin.Controls.MaterialButton materialButton_acidAnalyze; private MaterialSkin.Controls.MaterialButton materialButton_correction; private MaterialSkin.Controls.MaterialButton materialButton_imageProcess; diff --git a/src/PBAnaly/MainForm.cs b/src/PBAnaly/MainForm.cs index b9f65e8..e066310 100644 --- a/src/PBAnaly/MainForm.cs +++ b/src/PBAnaly/MainForm.cs @@ -43,6 +43,7 @@ namespace PBAnaly private Dictionary bioanalysisMannages = new Dictionary(); private Dictionary lanesMannages = new Dictionary(); + private Dictionary colonysMannages = new Dictionary(); private List bioanalyName = new List(); private List lanesName = new List(); bool isRun = false; @@ -115,7 +116,7 @@ namespace PBAnaly materialButton_acidAnalyze, //6、泳道分析 materialButton_roiAnalyze, //7、ROIs分析 materialButton_miniAnalyze, //8、微孔版分析 - materialButton_dotcounts, //9、菌落计数 + mb_colonyCount, //9、菌落计数 materialButton_correction //10、蛋白归一化 }; } @@ -684,6 +685,50 @@ namespace PBAnaly } } + + private void mb_colonyCount_Click(object sender, EventArgs e) + { + string selectedFilePath = ""; + // 弹出选择图像的框 + #region 打开图片 + OpenFileDialog openFileDialog = new OpenFileDialog(); + openFileDialog.Filter = "TIF Files (*.tif)|*.tif|All files (*.*)|*.*"; // 设置文件筛选器 + openFileDialog.Title = "Select a TIF File"; // 设置对话框标题 + + if (openFileDialog.ShowDialog() == DialogResult.OK) + { + + selectedFilePath = openFileDialog.FileName; + + + } + #endregion + if (selectedFilePath != "") + { + if (colonysMannages.TryGetValue(selectedFilePath, out var value)) + { + return; + } + if (colonysMannages.Count == 0) + { + colonysMannages.Clear(); + } + + ColonyMannage colonyMannage = new ColonyMannage(selectedFilePath, pl_right, colonysMannages); + if (colonyMannage.GetImagePanel == null) + { + colonyMannage = null; + return; + } + DataProcess_panel.Controls.Add(colonyMannage.GetImagePanel); + colonyMannage.GetImagePanel.BringToFront(); + + + colonysMannages.Add(selectedFilePath, colonyMannage); + } + + } + private void materialButton_log_Click(object sender, EventArgs e) { UI.LogForm logForm = new UI.LogForm(materialSkinManager); @@ -954,5 +999,7 @@ namespace PBAnaly { } + + } } diff --git a/src/PBAnaly/MainForm.resx b/src/PBAnaly/MainForm.resx index 09b4447..7c37da4 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/Module/ColonyMannage.cs b/src/PBAnaly/Module/ColonyMannage.cs new file mode 100644 index 0000000..6507744 --- /dev/null +++ b/src/PBAnaly/Module/ColonyMannage.cs @@ -0,0 +1,127 @@ +using PBAnaly.UI; +using SixLabors.ImageSharp.PixelFormats; +using SixLabors.ImageSharp; +using Sunny.UI; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace PBAnaly.Module +{ + public class ColonyMannage + { + #region 结构体 + #endregion + + #region 变量 + public string path { get; set; } + private Image image_L16; + private byte[] image_byte; + private byte[] image_8bit_rgb_byte; + private Image image_rgb_24 = null; + private LanesImagePanel imagePanel = null; + private BioanayImagePaletteForm imagePaletteForm = null; + #endregion + + public ColonyMannage(string _path, ReaLTaiizor.Controls.Panel _pl_right, Dictionary colonyMannages) + { + imagePanel = new LanesImagePanel(); + imagePanel.TopLevel = false; + imagePanel.Show(); + imagePanel.BringToFront(); + + this.path = _path; + var ret = ReadTif();// 读tif档 + if (ret == false) + { + imagePanel.Dispose(); + imagePanel = null; + return; + } + + RefreshImage(); + } + + + #region 方法 + private bool ReadTif() + { + // 读tif 或 tiff + // 如果是tiff 需要弹出选择的一帧 + + var extension = Path.GetExtension(path).Trim(); + if (extension == ".tif") + { + + image_L16 = util.LoadTiffAsL16(path); + image_byte = util.ConvertL16ImageToByteArray(image_L16); + + } + + if (image_L16 == null) + { + MessageBox.Show("图片加载失败"); + return false; + } + + + + image_8bit_rgb_byte = new byte[image_L16.Width * image_L16.Height * 3]; + + for (int i = 0; i < image_L16.Width * image_L16.Height; i++) + { + // 获取16位图像数据中的当前像素值 + ushort pixel16bit = (ushort)(image_byte[i * 2] | (image_byte[i * 2 + 1] << 8)); + byte gray = (byte)((pixel16bit / 65535.0) * 255); + // 将R、G、B分量存储到RGB格式的数组中 + image_8bit_rgb_byte[i * 3] = gray; + image_8bit_rgb_byte[i * 3 + 1] = gray; + image_8bit_rgb_byte[i * 3 + 2] = gray; + } + + image_rgb_24 = util.ConvertByteArrayToRgb24Image(image_8bit_rgb_byte, image_L16.Width, image_L16.Height, 3); + imagePanel.SetButtomLabel($"{image_L16.Width} x {image_L16.Height}"); + if (path.Length > 0) + { + var t = path.Split("\\"); + if (t.Length > 2) + { + imagePanel.SetButtomName($"{t[t.Length - 2]} {image_L16.Width} x {image_L16.Height}"); + } + + } + return true; + } + + private void RefreshImage() + { + if (imagePanel.image_pl.InvokeRequired) + { + imagePanel.image_pl.Invoke(new MethodInvoker(() => + { + RefreshImage(); + })); + + } + else + { + imagePanel.SetImage(image_rgb_24); + } + } + #endregion + + #region 对外接口 + #region imagepanel + public LanesImagePanel GetImagePanel + { + get { return imagePanel; } + } + + #endregion + #endregion + } +} diff --git a/src/PBAnaly/Module/util.cs b/src/PBAnaly/Module/util.cs index 434273f..7c8a669 100644 --- a/src/PBAnaly/Module/util.cs +++ b/src/PBAnaly/Module/util.cs @@ -92,6 +92,12 @@ namespace PBAnaly.Module Image image = Image.Load(filePath); return image; } + public static Image LoadTiffAsL8(string filePath) + { + // 加载图像并确保其为16位灰度图像 + Image image = Image.Load(filePath); + return image; + } public static byte[] ConvertL16ImageToByteArray(Image image) { int width = image.Width; @@ -112,6 +118,28 @@ namespace PBAnaly.Module return pixels; } + + public static byte[] ConvertL8ImageToByteArray(Image image) + { + int width = image.Width; + int height = image.Height; + byte[] pixels = new byte[width * height * sizeof(byte)]; + + int index = 0; + for (int y = 0; y < height; y++) + { + for (int x = 0; x < width; x++) + { + // 直接访问每个像素的值并转换为 byte[] + byte pixelValue = image[x, y].PackedValue; + BitConverter.GetBytes(pixelValue).CopyTo(pixels, index); + index += sizeof(byte); + } + } + + return pixels; + } + public static ushort[] ConvertL16ImageToUShortArray(Image image) { var byteArray = ConvertL16ImageToByteArray(image); diff --git a/src/PBAnaly/PBAnaly.csproj b/src/PBAnaly/PBAnaly.csproj index 79d6bb5..f963426 100644 --- a/src/PBAnaly/PBAnaly.csproj +++ b/src/PBAnaly/PBAnaly.csproj @@ -124,6 +124,7 @@ MainForm.cs + diff --git a/src/PBBiologyVC/PBColonyVC.cpp b/src/PBBiologyVC/PBColonyVC.cpp index bef0305..f60fdf1 100644 --- a/src/PBBiologyVC/PBColonyVC.cpp +++ b/src/PBBiologyVC/PBColonyVC.cpp @@ -1,46 +1,53 @@ #include "pch.h" //#include "PBColonyVC.h" //#include -//#include -//#include "PBColony.h" +//#include // -// -// -//namespace PBBiologyVC +//PBBiologyVC::PBColonyVC::PBColonyVC() //{ +// // pbcolony = new PBColony; +//} +//PBBiologyVC::PBColonyVC::~PBColonyVC() +//{ +// //delete pbcolony; +//} // -// PBColonyVC::~PBColonyVC() -// { +//void PBBiologyVC::PBColonyVC::run(System::Byte* image, int bit, unsigned short width, unsigned short height,int lower=-1,int upper=-1) +//{ +// //cv::Mat input_cn1; +// //if (bit == 16) +// //{ +// // input_cn1 = cv::Mat(height, width, CV_16UC1, image); +// // cv::normalize(input_cn1, input_cn1, 0, 255, cv::NORM_MINMAX); // һ 0-255 +// // input_cn1.convertTo(input_cn1, CV_8UC1); // תΪ CV_8UC1 +// //} +// //else if (bit == 8) +// //{ +// // input_cn1 = cv::Mat(height, width, CV_8UC1, image); +// //} +// //else +// //{ +// // return; +// //} +// //Mat input_cn3; +// //Point2f center; +// //float radius; +// //int ret =pbcolony->colony_get_circle(input_cn1, center, radius); +// //if (ret) +// //{ +// // cv::Mat mask = pbcolony->generateMaskImage(input_cn1.cols, input_cn1.rows, center.x - radius, center.y - radius, 2 * radius, 2 * radius); +// // int lower = -1; +// // int upper = -1; +// // Mat bin = pbcolony->get_lower_upper(input_cn1, mask, lower, upper); // -// } +// // ClassifyStandard class_stand; +// // pbcolony->init_classify_standard(class_stand); +// // vector Cinfo = pbcolony->get_colony_info(input_cn1, bin, input_cn3, class_stand, pbcolony->image_inverted_flag); +// // ColonyStatistic CStatistic = pbcolony->get_colony_statistics(Cinfo); // -// void PBColonyVC::run(System::Byte* mat, unsigned short width, unsigned short height) -// { +// // cv::imshow("a", input_cn3); +// // cv::waitKey(0); // -// /*for (size_t i = 0; i < width * height; i++) -// { -// std::cout << mat[i]; -// } -// std::cout << std::endl; // -// cv::Mat src(height, width, CV_8UC1, mat); -// Mat input_cn3; -// cv::Point2f center; -// float radius; -// int ret = pbcolony->colony_get_circle(src,center,radius); -// if (ret) -// { -// Mat mask = pbcolony->generateMaskImage(src.cols, src.rows, center.x - radius, center.y - radius, 2 * radius, 2 * radius); -// int lower = -1; -// int upper = -1; -// Mat bin = pbcolony->get_lower_upper(src, mask, lower, upper); -// -// ClassifyStandard class_stand; -// pbcolony->init_classify_standard(class_stand); -// vector Cinfo = pbcolony->get_colony_info(src, bin, input_cn3, class_stand, pbcolony->image_inverted_flag); -// ColonyStatistic CStatistic = pbcolony->get_colony_statistics(Cinfo); -// -// -// }*/ -// } -//} \ No newline at end of file +// // } +//} diff --git a/src/PBBiologyVC/PBColonyVC.h b/src/PBBiologyVC/PBColonyVC.h index 3e7839c..3b5f759 100644 --- a/src/PBBiologyVC/PBColonyVC.h +++ b/src/PBBiologyVC/PBColonyVC.h @@ -1,20 +1,66 @@ //#pragma once -//#include "PBLane.h" +// //using namespace System; //using namespace System::Collections::Generic; +//using namespace System::Runtime::InteropServices; // -//namespace PBBiologyVC { +//namespace PBBiologyVC +//{ +// public enum dataClassVC +// { +// AREA = 0, // +// PERIMETER, //ܳ +// DIAMETER, //ֱ +// IOD, //IOD +// }; +// public ref struct ColonyInfoVC +// { +// int IDX; // +// int area; // +// int perimeter; //ܳ +// float diameter; //ֱ +// int IOD; //IOD +// int classify; // +// }; +// public ref struct ClassifyStandardVC +// { +// List^ interval; //ݼ־ +// float maxd; //־ +// float mind; //С־ +// int num; // +// dataClassVC classes; // +// }; +// public ref struct MinMaxInfoVC +// { +// float mind; //Сֵ +// float minIDX; //СֵӦ +// float maxd; //ֵ +// float maxIDX; //ֵӦ +// float range; //Χ +// float mean; //ֵ +// float sum; // +// int number; // +// }; // -// +// +// public ref struct ColonyStatisticVC +// { +// MinMaxInfoVC area; //ͳƽ +// MinMaxInfoVC perimeter; //ܳͳƽ +// MinMaxInfoVC diameter; //ֱͳƽ +// MinMaxInfoVC IOD; //IODͳƽ +// MinMaxInfoVC classify; //ͳƽ +// }; // public ref class PBColonyVC // { +// PBColonyVC(); // // ~PBColonyVC(); // // public: -// void run(System::Byte* mat, unsigned short width, unsigned short height); -// private: -// -// }; -//} +// void run(System::Byte* image, int bit, unsigned short width, unsigned short height, int lower , int upper ); // +// private: +// //PBColony* pbcolony; +// }; +//} \ No newline at end of file From 418ce1b81adf4637c885fd07581096a5ad30fc59 Mon Sep 17 00:00:00 2001 From: moco Date: Fri, 3 Jan 2025 22:53:29 +0800 Subject: [PATCH 6/8] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=8F=8C=E8=90=BD?= =?UTF-8?q?=E8=AE=A1=E6=95=B0=E7=9A=84=E7=AE=97=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/PBAnaly/Module/ColonyMannage.cs | 21 ++++ src/PBBiologyVC/PBColonyVC.cpp | 104 ++++++++++---------- src/PBBiologyVC/PBColonyVC.h | 143 +++++++++++++++------------- src/PBBiologyVC/PBImageProcessVC.h | 2 +- 4 files changed, 151 insertions(+), 119 deletions(-) diff --git a/src/PBAnaly/Module/ColonyMannage.cs b/src/PBAnaly/Module/ColonyMannage.cs index 6507744..c0de18d 100644 --- a/src/PBAnaly/Module/ColonyMannage.cs +++ b/src/PBAnaly/Module/ColonyMannage.cs @@ -9,6 +9,9 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; +using System.Threading; +using System.Web.UI.WebControls; + namespace PBAnaly.Module { @@ -25,6 +28,12 @@ namespace PBAnaly.Module private Image image_rgb_24 = null; private LanesImagePanel imagePanel = null; private BioanayImagePaletteForm imagePaletteForm = null; + private PBBiologyVC.PBColonyVC pbvc = new PBBiologyVC.PBColonyVC(); + + private Thread algThread; + private bool isalgRun = false; + private bool isUpdateAlg = false; + #endregion public ColonyMannage(string _path, ReaLTaiizor.Controls.Panel _pl_right, Dictionary colonyMannages) @@ -43,11 +52,23 @@ namespace PBAnaly.Module return; } + ImageAlg(); RefreshImage(); } #region 方法 + + private void ImageAlg() + { + unsafe + { + fixed (byte* p = image_byte) + { + pbvc.run(p, 16, (ushort)image_L16.Width, (ushort)image_L16.Height, -1, -1); + } + } + } private bool ReadTif() { // 读tif 或 tiff diff --git a/src/PBBiologyVC/PBColonyVC.cpp b/src/PBBiologyVC/PBColonyVC.cpp index f60fdf1..aecd0c9 100644 --- a/src/PBBiologyVC/PBColonyVC.cpp +++ b/src/PBBiologyVC/PBColonyVC.cpp @@ -1,53 +1,53 @@ #include "pch.h" -//#include "PBColonyVC.h" -//#include -//#include -// -//PBBiologyVC::PBColonyVC::PBColonyVC() -//{ -// // pbcolony = new PBColony; -//} -//PBBiologyVC::PBColonyVC::~PBColonyVC() -//{ -// //delete pbcolony; -//} -// -//void PBBiologyVC::PBColonyVC::run(System::Byte* image, int bit, unsigned short width, unsigned short height,int lower=-1,int upper=-1) -//{ -// //cv::Mat input_cn1; -// //if (bit == 16) -// //{ -// // input_cn1 = cv::Mat(height, width, CV_16UC1, image); -// // cv::normalize(input_cn1, input_cn1, 0, 255, cv::NORM_MINMAX); // һ 0-255 -// // input_cn1.convertTo(input_cn1, CV_8UC1); // תΪ CV_8UC1 -// //} -// //else if (bit == 8) -// //{ -// // input_cn1 = cv::Mat(height, width, CV_8UC1, image); -// //} -// //else -// //{ -// // return; -// //} -// //Mat input_cn3; -// //Point2f center; -// //float radius; -// //int ret =pbcolony->colony_get_circle(input_cn1, center, radius); -// //if (ret) -// //{ -// // cv::Mat mask = pbcolony->generateMaskImage(input_cn1.cols, input_cn1.rows, center.x - radius, center.y - radius, 2 * radius, 2 * radius); -// // int lower = -1; -// // int upper = -1; -// // Mat bin = pbcolony->get_lower_upper(input_cn1, mask, lower, upper); -// -// // ClassifyStandard class_stand; -// // pbcolony->init_classify_standard(class_stand); -// // vector Cinfo = pbcolony->get_colony_info(input_cn1, bin, input_cn3, class_stand, pbcolony->image_inverted_flag); -// // ColonyStatistic CStatistic = pbcolony->get_colony_statistics(Cinfo); -// -// // cv::imshow("a", input_cn3); -// // cv::waitKey(0); -// -// -// // } -//} +#include "PBColonyVC.h" +#include +#include + +void PBBiologyVC::PBColonyVC::run(System::Byte* image, int bit, unsigned short width, unsigned short height,int lower,int upper) +{ + PBColony pbcolony; + cv::Mat input_cn1; + if (bit == 16) + { + input_cn1 = cv::Mat(height, width, CV_16UC1, image); + cv::normalize(input_cn1, input_cn1, 0, 255, cv::NORM_MINMAX); // һ 0-255 + input_cn1.convertTo(input_cn1, CV_8UC1); // תΪ CV_8UC1 + } + else if (bit == 8) + { + input_cn1 = cv::Mat(height, width, CV_8UC1, image); + } + else + { + return; + } + Mat input_cn3; + Point2f center; + float radius; + int ret =pbcolony.colony_get_circle(input_cn1, center, radius); + if (ret) + { + cv::Mat mask = pbcolony.generateMaskImage(input_cn1.cols, input_cn1.rows, center.x - radius, center.y - radius, 2 * radius, 2 * radius); + int lower = -1; + int upper = -1; + Mat bin = pbcolony.get_lower_upper(input_cn1, mask, lower, upper); + + ClassifyStandard class_stand; + pbcolony.init_classify_standard(class_stand); + vector Cinfo = pbcolony.get_colony_info(input_cn1, bin, input_cn3, class_stand, pbcolony.image_inverted_flag); + ColonyStatistic CStatistic = pbcolony.get_colony_statistics(Cinfo); + + cv::imshow("a", input_cn3); + cv::waitKey(0); + + + } +} + + + +PBBiologyVC::PBColonyVC::~PBColonyVC() +{ + +} + diff --git a/src/PBBiologyVC/PBColonyVC.h b/src/PBBiologyVC/PBColonyVC.h index 3b5f759..3d51557 100644 --- a/src/PBBiologyVC/PBColonyVC.h +++ b/src/PBBiologyVC/PBColonyVC.h @@ -1,66 +1,77 @@ -//#pragma once -// -//using namespace System; -//using namespace System::Collections::Generic; -//using namespace System::Runtime::InteropServices; -// -//namespace PBBiologyVC -//{ -// public enum dataClassVC -// { -// AREA = 0, // -// PERIMETER, //ܳ -// DIAMETER, //ֱ -// IOD, //IOD -// }; -// public ref struct ColonyInfoVC -// { -// int IDX; // -// int area; // -// int perimeter; //ܳ -// float diameter; //ֱ -// int IOD; //IOD -// int classify; // -// }; -// public ref struct ClassifyStandardVC -// { -// List^ interval; //ݼ־ -// float maxd; //־ -// float mind; //С־ -// int num; // -// dataClassVC classes; // -// }; -// public ref struct MinMaxInfoVC -// { -// float mind; //Сֵ -// float minIDX; //СֵӦ -// float maxd; //ֵ -// float maxIDX; //ֵӦ -// float range; //Χ -// float mean; //ֵ -// float sum; // -// int number; // -// }; -// -// -// public ref struct ColonyStatisticVC -// { -// MinMaxInfoVC area; //ͳƽ -// MinMaxInfoVC perimeter; //ܳͳƽ -// MinMaxInfoVC diameter; //ֱͳƽ -// MinMaxInfoVC IOD; //IODͳƽ -// MinMaxInfoVC classify; //ͳƽ -// }; -// public ref class PBColonyVC -// { -// PBColonyVC(); -// -// ~PBColonyVC(); -// -// public: -// void run(System::Byte* image, int bit, unsigned short width, unsigned short height, int lower , int upper ); -// -// private: -// //PBColony* pbcolony; -// }; -//} \ No newline at end of file +#pragma once + +using namespace System; +using namespace System::Collections::Generic; +using namespace System::Runtime::InteropServices; + +namespace PBBiologyVC{ + + public ref struct ColonyInfoVC + { + public: + int IDX; // + int area; // + int perimeter; //ܳ + float diameter; //ֱ + int IOD; //IOD + int classify; // + + }; + public enum dataClassVC + { + AREA = 0, // + PERIMETER, //ܳ + DIAMETER, //ֱ + IOD, //IOD + }; + public ref struct ClassifyStandardVC + { + List^ interval; //ݼ־ + float maxd; //־ + float mind; //С־ + int num; // + dataClassVC classes; // + }; + public ref struct MinMaxInfoVC + { + float mind; //Сֵ + float minIDX; //СֵӦ + float maxd; //ֵ + float maxIDX; //ֵӦ + float range; //Χ + float mean; //ֵ + float sum; // + int number; // + }; + + + public ref struct ColonyStatisticVC + { + MinMaxInfoVC area; //ͳƽ + MinMaxInfoVC perimeter; //ܳͳƽ + MinMaxInfoVC diameter; //ֱͳƽ + MinMaxInfoVC IOD; //IODͳƽ + MinMaxInfoVC classify; //ͳƽ + }; + public ref class PBColonyVC + { + ~PBColonyVC(); + public: + void run(System::Byte* image, int bit, unsigned short width, unsigned short height, int lower, int upper); + }; + + + + //public ref class PBColonyVC + //{ + // //PBColonyVC(); + + // //~PBColonyVC(); + + //public: + // //void run(System::Byte* image, int bit, unsigned short width, unsigned short height, int lower , int upper ); + + //private: + // //PBColony* pbcolony; + //}; +} \ No newline at end of file diff --git a/src/PBBiologyVC/PBImageProcessVC.h b/src/PBBiologyVC/PBImageProcessVC.h index 1d228ef..d7e5a38 100644 --- a/src/PBBiologyVC/PBImageProcessVC.h +++ b/src/PBBiologyVC/PBImageProcessVC.h @@ -7,7 +7,7 @@ using namespace System::Collections::Generic; using namespace System::Runtime::InteropServices; namespace PBBiologyVC { - + public ref struct Pseudo_infoVC { public: From e78310a3e79cf745541720f969cee568fe9c90d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=BF=E4=B8=9C=E4=BA=9A?= Date: Sat, 4 Jan 2025 13:31:13 +0800 Subject: [PATCH 7/8] =?UTF-8?q?=E6=95=B4=E7=90=86=E4=BA=86=E8=8F=8C?= =?UTF-8?q?=E8=90=BD=E8=AE=A1=E6=95=B0=E7=9A=84=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/PBAnaly/MainForm.Designer.cs | 57 +- src/PBAnaly/MainForm.cs | 20 +- src/PBAnaly/MainForm.resx | 1001 ++++++++++++--------------- src/PBAnaly/Module/ColonyMannage.cs | 8 +- src/PBAnaly/Program.cs | 2 +- src/PBBiologyVC/PBColonyVC.cpp | 6 +- src/PBBiologyVC/PBColonyVC.h | 2 +- 7 files changed, 462 insertions(+), 634 deletions(-) diff --git a/src/PBAnaly/MainForm.Designer.cs b/src/PBAnaly/MainForm.Designer.cs index 629ba7c..7d1a26a 100644 --- a/src/PBAnaly/MainForm.Designer.cs +++ b/src/PBAnaly/MainForm.Designer.cs @@ -57,8 +57,6 @@ this.materialButton_resetImage = new MaterialSkin.Controls.MaterialButton(); this.materialButton_inverse = new MaterialSkin.Controls.MaterialButton(); this.materialButton_save = new MaterialSkin.Controls.MaterialButton(); - this.materialButton_forward = new MaterialSkin.Controls.MaterialButton(); - this.materialButton_return = new MaterialSkin.Controls.MaterialButton(); this.pl_right = new ReaLTaiizor.Controls.Panel(); this.thunderLabel1 = new ReaLTaiizor.Controls.ThunderLabel(); this.metroPanel_RightTop.SuspendLayout(); @@ -269,7 +267,7 @@ this.DataProcess_panel.Dock = System.Windows.Forms.DockStyle.Fill; this.DataProcess_panel.EdgeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(41)))), ((int)(((byte)(50))))); this.DataProcess_panel.Location = new System.Drawing.Point(4, 4); - this.DataProcess_panel.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.DataProcess_panel.Margin = new System.Windows.Forms.Padding(4); this.DataProcess_panel.Name = "DataProcess_panel"; this.DataProcess_panel.Padding = new System.Windows.Forms.Padding(7, 6, 7, 6); this.tl_right_main_view.SetRowSpan(this.DataProcess_panel, 2); @@ -285,7 +283,7 @@ this.CompanyIcon_pictureBox.Dock = System.Windows.Forms.DockStyle.Fill; this.CompanyIcon_pictureBox.Image = global::PBAnaly.Properties.Resources.京仪科技定稿_画板_1_副本2; this.CompanyIcon_pictureBox.Location = new System.Drawing.Point(4, 4); - this.CompanyIcon_pictureBox.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.CompanyIcon_pictureBox.Margin = new System.Windows.Forms.Padding(4); this.CompanyIcon_pictureBox.Name = "CompanyIcon_pictureBox"; this.tableLayoutPanel1.SetRowSpan(this.CompanyIcon_pictureBox, 2); this.CompanyIcon_pictureBox.Size = new System.Drawing.Size(272, 100); @@ -445,8 +443,6 @@ this.flowLayoutPanel2.Controls.Add(this.materialButton_resetImage); this.flowLayoutPanel2.Controls.Add(this.materialButton_inverse); this.flowLayoutPanel2.Controls.Add(this.materialButton_save); - this.flowLayoutPanel2.Controls.Add(this.materialButton_forward); - this.flowLayoutPanel2.Controls.Add(this.materialButton_return); this.flowLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; this.flowLayoutPanel2.Location = new System.Drawing.Point(280, 69); this.flowLayoutPanel2.Margin = new System.Windows.Forms.Padding(0); @@ -598,47 +594,6 @@ this.materialButton_save.UseVisualStyleBackColor = true; this.materialButton_save.MouseMove += new System.Windows.Forms.MouseEventHandler(this.materialButton_save_MouseMove); // - // materialButton_forward - // - this.materialButton_forward.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.materialButton_forward.Density = MaterialSkin.Controls.MaterialButton.MaterialButtonDensity.Default; - this.materialButton_forward.Depth = 0; - this.materialButton_forward.HighEmphasis = true; - this.materialButton_forward.Icon = ((System.Drawing.Image)(resources.GetObject("materialButton_forward.Icon"))); - this.materialButton_forward.Location = new System.Drawing.Point(448, 0); - this.materialButton_forward.Margin = new System.Windows.Forms.Padding(0); - this.materialButton_forward.MouseState = MaterialSkin.MouseState.HOVER; - this.materialButton_forward.Name = "materialButton_forward"; - this.materialButton_forward.NoAccentTextColor = System.Drawing.Color.Empty; - this.materialButton_forward.Size = new System.Drawing.Size(64, 36); - this.materialButton_forward.TabIndex = 23; - this.materialButton_forward.Text = " "; - this.materialButton_forward.Type = MaterialSkin.Controls.MaterialButton.MaterialButtonType.Text; - this.materialButton_forward.UseAccentColor = false; - this.materialButton_forward.UseVisualStyleBackColor = true; - this.materialButton_forward.MouseMove += new System.Windows.Forms.MouseEventHandler(this.materialButton_forward_MouseMove); - // - // materialButton_return - // - this.materialButton_return.Anchor = System.Windows.Forms.AnchorStyles.None; - this.materialButton_return.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.materialButton_return.Density = MaterialSkin.Controls.MaterialButton.MaterialButtonDensity.Default; - 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(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"; - this.materialButton_return.NoAccentTextColor = System.Drawing.Color.Empty; - this.materialButton_return.Size = new System.Drawing.Size(64, 36); - this.materialButton_return.TabIndex = 22; - this.materialButton_return.Text = " "; - this.materialButton_return.Type = MaterialSkin.Controls.MaterialButton.MaterialButtonType.Text; - this.materialButton_return.UseAccentColor = false; - this.materialButton_return.UseVisualStyleBackColor = true; - this.materialButton_return.MouseMove += new System.Windows.Forms.MouseEventHandler(this.materialButton_return_MouseMove); - // // pl_right // this.pl_right.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(39)))), ((int)(((byte)(51)))), ((int)(((byte)(63))))); @@ -647,7 +602,7 @@ this.pl_right.Location = new System.Drawing.Point(1042, 71); this.pl_right.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.pl_right.Name = "pl_right"; - this.pl_right.Padding = new System.Windows.Forms.Padding(5, 5, 5, 5); + this.pl_right.Padding = new System.Windows.Forms.Padding(5); this.tableLayoutPanel1.SetRowSpan(this.pl_right, 2); this.pl_right.Size = new System.Drawing.Size(418, 653); this.pl_right.SmoothingType = System.Drawing.Drawing2D.SmoothingMode.HighQuality; @@ -659,7 +614,7 @@ this.thunderLabel1.BackColor = System.Drawing.Color.Transparent; this.thunderLabel1.ForeColor = System.Drawing.Color.WhiteSmoke; this.thunderLabel1.Location = new System.Drawing.Point(12, 6); - this.thunderLabel1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.thunderLabel1.Margin = new System.Windows.Forms.Padding(4); this.thunderLabel1.Name = "thunderLabel1"; this.thunderLabel1.Size = new System.Drawing.Size(267, 20); this.thunderLabel1.TabIndex = 19; @@ -677,7 +632,7 @@ this.DrawerAutoShow = true; this.FormStyle = MaterialSkin.Controls.MaterialForm.FormStyles.ActionBar_None; this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.Margin = new System.Windows.Forms.Padding(4); this.Name = "MainForm"; this.Padding = new System.Windows.Forms.Padding(4, 30, 4, 4); this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; @@ -707,8 +662,6 @@ private MaterialSkin.Controls.MaterialButton materialButton_analyzedata; private MaterialSkin.Controls.MaterialButton materialButton_outimage; private MaterialSkin.Controls.MaterialButton materialButton_changeFormSize; - private MaterialSkin.Controls.MaterialButton materialButton_forward; - private MaterialSkin.Controls.MaterialButton materialButton_return; private MaterialSkin.Controls.MaterialButton materialButton_save; private MaterialSkin.Controls.MaterialButton materialButton_inverse; private MaterialSkin.Controls.MaterialButton materialButton_resetImage; diff --git a/src/PBAnaly/MainForm.cs b/src/PBAnaly/MainForm.cs index e066310..0b5c370 100644 --- a/src/PBAnaly/MainForm.cs +++ b/src/PBAnaly/MainForm.cs @@ -380,7 +380,7 @@ namespace PBAnaly private void materialButton_changeFormSize_MouseMove(object sender, MouseEventArgs e) { - if (sender is Button) + if (sender is Button) { Button btn = sender as Button; this.btnStartUpToolTip.SetToolTip(btn, "适配窗口"); @@ -441,23 +441,7 @@ namespace PBAnaly } } - private void materialButton_return_MouseMove(object sender, MouseEventArgs e) - { - if (sender is Button) - { - Button btn = sender as Button; - this.btnStartUpToolTip.SetToolTip(btn, "Ctrl + Z 撤銷"); - } - } - - private void materialButton_forward_MouseMove(object sender, MouseEventArgs e) - { - if (sender is Button) - { - Button btn = sender as Button; - this.btnStartUpToolTip.SetToolTip(btn, "Ctrl + Y 重做"); - } - } + private void MainForm_SizeChanged(object sender, EventArgs e) { diff --git a/src/PBAnaly/MainForm.resx b/src/PBAnaly/MainForm.resx index 7c37da4..1d8a5f4 100644 --- a/src/PBAnaly/MainForm.resx +++ b/src/PBAnaly/MainForm.resx @@ -563,455 +563,6 @@ 17, 17 - - - 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 - Y8xOY6+9fghokNfA1CcF5wAAAABJRU5ErkJggg== - - - - - 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 @@ -1628,119 +1179,453 @@ uneO5+g3AwAAAABJRU5ErkJggg== - + - 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 - /g9U/tB3US9YHgAAAABJRU5ErkJggg== + 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 + Y8xOY6+9fghokNfA1CcF5wAAAABJRU5ErkJggg== + + + + + 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 diff --git a/src/PBAnaly/Module/ColonyMannage.cs b/src/PBAnaly/Module/ColonyMannage.cs index c0de18d..2fc8fe0 100644 --- a/src/PBAnaly/Module/ColonyMannage.cs +++ b/src/PBAnaly/Module/ColonyMannage.cs @@ -65,9 +65,15 @@ namespace PBAnaly.Module { fixed (byte* p = image_byte) { - pbvc.run(p, 16, (ushort)image_L16.Width, (ushort)image_L16.Height, -1, -1); + fixed (byte* bit8rgb = image_8bit_rgb_byte) + { + pbvc.run(p, 16, (ushort)image_L16.Width, (ushort)image_L16.Height, -1, -1, bit8rgb); + } + } } + image_rgb_24 = util.ConvertByteArrayToRgb24Image(image_8bit_rgb_byte, image_L16.Width, image_L16.Height, 3); + RefreshImage(); } private bool ReadTif() { diff --git a/src/PBAnaly/Program.cs b/src/PBAnaly/Program.cs index 696d37f..519f5aa 100644 --- a/src/PBAnaly/Program.cs +++ b/src/PBAnaly/Program.cs @@ -63,7 +63,7 @@ namespace PBAnaly } - if (Util.ViKeySoft.Instance.CheckViKey() == false) + if (Util.ViKeySoft.Instance.CheckViKey() == true) { MessageBox.Show("你没有权限,请检查加密狗是否插入","警告"); return; diff --git a/src/PBBiologyVC/PBColonyVC.cpp b/src/PBBiologyVC/PBColonyVC.cpp index aecd0c9..2d9182f 100644 --- a/src/PBBiologyVC/PBColonyVC.cpp +++ b/src/PBBiologyVC/PBColonyVC.cpp @@ -3,7 +3,7 @@ #include #include -void PBBiologyVC::PBColonyVC::run(System::Byte* image, int bit, unsigned short width, unsigned short height,int lower,int upper) +void PBBiologyVC::PBColonyVC::run(System::Byte* image, int bit, unsigned short width, unsigned short height,int lower,int upper, System::Byte* dstRgb) { PBColony pbcolony; cv::Mat input_cn1; @@ -37,8 +37,8 @@ void PBBiologyVC::PBColonyVC::run(System::Byte* image, int bit, unsigned short w vector Cinfo = pbcolony.get_colony_info(input_cn1, bin, input_cn3, class_stand, pbcolony.image_inverted_flag); ColonyStatistic CStatistic = pbcolony.get_colony_statistics(Cinfo); - cv::imshow("a", input_cn3); - cv::waitKey(0); + + std::memcpy(dstRgb, input_cn3.data, input_cn3.rows * input_cn3.cols*3); } diff --git a/src/PBBiologyVC/PBColonyVC.h b/src/PBBiologyVC/PBColonyVC.h index 3d51557..c81fade 100644 --- a/src/PBBiologyVC/PBColonyVC.h +++ b/src/PBBiologyVC/PBColonyVC.h @@ -57,7 +57,7 @@ namespace PBBiologyVC{ { ~PBColonyVC(); public: - void run(System::Byte* image, int bit, unsigned short width, unsigned short height, int lower, int upper); + void run(System::Byte* image, int bit, unsigned short width, unsigned short height, int lower, int upper, System::Byte* dstRgb); }; From 6af292bc7f1f0a7f5759fb6add9ef0586ff1c800 Mon Sep 17 00:00:00 2001 From: cloud301530 <2690004082@qq.com> Date: Mon, 6 Jan 2025 17:25:43 +0800 Subject: [PATCH 8/8] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=B8=AD=E8=8B=B1?= =?UTF-8?q?=E6=96=87=E5=88=87=E6=8D=A2=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/PBAnaly/Assist/GlobalData.cs | 169 ++++ src/PBAnaly/LoginCommon/BackPassWordForm.cs | 57 +- .../LoginCommon/BackPassWordForm.en-US.resx | 123 +++ .../LoginCommon/BackPassWordForm.zh-CN.resx | 123 +++ src/PBAnaly/LoginCommon/LoginForm.cs | 55 +- .../LoginCommon/RegisterFrom.Designer.cs | 302 +++--- src/PBAnaly/LoginCommon/RegisterFrom.cs | 54 +- .../LoginCommon/RoleManageForm.Designer.cs | 74 +- src/PBAnaly/LoginCommon/RoleManageForm.cs | 56 +- src/PBAnaly/LoginCommon/UserManage.cs | 13 + .../LoginCommon/UserManageForm.Designer.cs | 242 ++--- src/PBAnaly/LoginCommon/UserManageForm.cs | 55 +- src/PBAnaly/MainForm.Designer.cs | 16 +- src/PBAnaly/MainForm.cs | 177 +++- src/PBAnaly/MainForm.resx | 898 +++++++++--------- src/PBAnaly/PBAnaly.csproj | 15 +- src/PBAnaly/Program.cs | 12 +- src/PBAnaly/Properties/Resources.en-US.resx | 328 +++++++ src/PBAnaly/Properties/Resources.resx | 243 ++++- src/PBAnaly/Properties/Resources.zh-CN.resx | 328 +++++++ src/PBAnaly/UI/AnalyzeDataForm.Designer.cs | 12 +- src/PBAnaly/UI/AnalyzeDataForm.cs | 53 ++ src/PBAnaly/UI/BioanalyImagePanel.Designer.cs | 21 +- src/PBAnaly/UI/BioanalyImagePanel.cs | 55 +- src/PBAnaly/UI/LanesImagePaletteForm.cs | 54 +- src/PBAnaly/UI/MultiImageForm.Designer.cs | 74 +- src/PBAnaly/UI/MultiImageForm.cs | 57 ++ src/PBAnaly/UI/SizeForm.cs | 57 +- src/PBAnaly/UI/SystemSettingForm.Designer.cs | 252 +++-- src/PBAnaly/UI/SystemSettingForm.cs | 207 +++- 30 files changed, 3213 insertions(+), 969 deletions(-) create mode 100644 src/PBAnaly/Assist/GlobalData.cs create mode 100644 src/PBAnaly/LoginCommon/BackPassWordForm.en-US.resx create mode 100644 src/PBAnaly/LoginCommon/BackPassWordForm.zh-CN.resx create mode 100644 src/PBAnaly/Properties/Resources.en-US.resx create mode 100644 src/PBAnaly/Properties/Resources.zh-CN.resx 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 @@ 1haxWdsBWACdaEWoF2LWtLi96EtYGJ0qfpQ+DPWizKbbrTgKnb/5Nf7oUy/QbDrMQjw0uDpGKt+eZNPl bpyNPbAcRrp4gEu9CWaDehHXIn6l2xKxS3xxxW3yX8OliFs/1BtlZXseT+CPuB0xNPH0bvz0ieem4vyJ e0nXQGu/S6q3ueb6P9zw0HeXInssAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAABGdBTUEAALGPC/xhBQAAD2VJREFUeF7t - nQmQHFUZx2NRiAiB7e4J4YgKJQJyCKIUolKCiIrcYCSkyirkUA4BQRAUKRBPxHDszuveJaHQiIbaQhRF - KSlFQS4hCmiS3en3ZsMViCAgV7AgGr+3+4lx9ts3x76e6Zn+/6p+tanK9HvfO76ZN9Pdr2cAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6EZKA6NbR7E+ - LVTpVWGsrw9i/Tv6u4J8llwHe8IXo0Qb+nsXjfONUZwmoapcHA1VduJpANanVB7ZIYjTc6mzbq/pSFgw - 6Q1xaZDo80tlvSdPj+ISKvNx+rT4udRREJL3hok+nqdLcQjiyr5hbJYIHQKhoLkjSCrzePr0LkFidg2V - vkbuBAjrekug9KE8nXqLqFw5gL5jjAmNhrApaVn+HZ5WvUGg0mOlhkLYqvbXTZ5e3U0Qp/1SAyH04CvB - UHU3nmrdB30U/kJoFIRe3bRfz+Ip1z3QF/IBqTEQ+pbeiA1Pu+4gVNUzpYZAmJ3muzz98k0Upx+hYNfK - jYAwOwOlT+VpmFOGhzegIP8kBd+66av093HyAfvLBex+aUzvozfRlTSmL/1vnP0YqepePBvzRxSb06Wg - mzd9JlL6uiCpHsJFgx4lHNQ72wsVadyXTZ4HLZiYa7nofFG6ZnRmmOgRMejGXWU7qzT08FZcLCgQQWw+ - S58wS4V50ZR9A3o/LjI/0NLqfCnYxk2HkBjAwp8owhxp2GEuKh/MUiu3pKAerQmycalDuCgAxpnuG24w - WP0EF9V5pvPdo+euqwHeCFT1g9KcaUyzhIvpPBTQryYH2JBXcBEAiIxf5CrPnTqaNbk4wz5Lme3lAOu6 - iIsAwEkQpycL86euuTgvQoGcXRtYIwbx2L5cBABO5gw/tjF9IlSkeeQyiPVtXETnoEAerA2snhT4T/lw - ABoiUukF0lyqZ0eXWbMXr95ECqoB53IRADREq0t5Wp4dzEW0n80XPrydFJRLWhc+xYcD0BQ0f1r4MSj9 - DB/efqKhlXvLQU0tJYjiwwFoikBVm74zlZbz5/Hh7acv1odJQdXxC3w4AE3Rp9I9hPlUzwV8ePuhyk+s - CaauQVydz4cD0BRRUtlGmlMu6cv9dXx4+4li/RUpKKeD6YF8OADNMbRuQ3FOuVTprXx0+2nlorJcXmkJ - ugZpTrm095/woe0HCQLajTSnXCJBQKGQ5pRLJAgoFNKccokEAYVCmlMukSCgUEhzyiUSBBQKaU65RIKA - QiHNKZdIEFAopDnlEgkCCoU0p1wiQUChkOaUSyQIKBTSnHKJBAGFQppTLpEgoFBIc8olEkQgLOtPUV0L - g2R8p/mnyVfIF8I4fZA6bHGo9AmbXb485JeDLsLOoWZEgqwHdcZ5YaJXS/VKRrGOw349hw8HXYA0ji6R - IERfot898cwJuc46vkRJdTwXBXKOMH5OC58gQVw5iMr9d209TZuYS7hIkGPEsXNY6ASh5Ng3jM2/pHpa - MjEXctEgp4jj5rCwCTJLLd/UPt1UqmNaDupPchUgh4hj5rCwCUINL0vlT9vEPDLj4uVv5GpAzhDHzGEh - E2TWYPUdUtm+tPvAclUgZ0jj5bKQCRIk5htS2R4d46pAzhDGymkhE4SWQX+RyvbqoN6HqwM5Qhwrh4VL - kJnlxyOpXO8qfRZXCXKEOFYOC5cgoRp5v1Sub6MEm2znEWmsXBYuQaJBfbhUrn/T/DwEEryOPFZTiwTJ - yEjpzm16DKZEGiuXxVtilfU+UrkZ2Llt88GUCOPktHAJstmix0KpXO8m5iSuEuQIcawcFi5BLGFsHpLK - 9mkwUN2NqwM5Qhorl4VMkMxPFCq9jKsCOUMcL4eFTJBSeWQHqWyPns1VgZwhjJXTQiaIxZ6nkMr3YJWr - ADlEGC+nhU2QsF9vRuWN1ZY/XSOVHsVVgBwijZnLwiaIpS/WH6Iy/d0wpVLcMJVzxHFzWOgEsQSxsbfc - vlRbT9MqfTEXCXKMOHYOC58glr7Byu5U9j21dTViFOt/0rLqOC4K5BxpDF0iQdYjVOYcquPR2jqnVKWD - fcnItnw46ALEcXSIBBGIYnNEGKdDYaIfpCSYWH6p9DXSfqm/IYirJ88cqpT45T3LtteufNPExhb6bPKK - KE5/REvJW+nfD5CPUx+9Sn/tpnp/Jx+l/hoJlN1sz9xBE6scxOl8+nR9JxeXCyhOcV5NJRKkEYbXbcD/ - 6mn6kpXbRok5zk5u6ut7aaKvre3/Fl1FifMzO95BYnbl6jqCEJtTJAiYEZX14TQRFlP/rqnt70xU6Y30 - KTx/Rr/eiENoG2I8DpEgBSUc1DvbfbxomZT5dWlTGSXa0BLs0lJZ78lhZY4Uh0skSMEIF+o59D3icqlv - O6j9LrOgHT941NRbVyRIgaAv0WdRcjwm9WsuTPTqSJkL7FUOHLJ3xHodIkEKAPXbXJp8d9f2ZY5dEST6 - FA7fK0JdTpEgPQzvWr9E6scucdheec3N8YJQh1MkSA8y5/K7N6al1EXUXy/X9l/XSUvCIDHzuGnTRqzD - IRKkx6A+PWbiZJ3cf91qFKencxOnhVS2SyRIj9DXX9l9/Ey30Gc95Ne4uS0jlOkUCdLt9OuNQpVeSH3z - Ym1f9aL0JhBzy1tCKtMlEqSLof6YS2v0+2v7qE0+Sd4TxuY+shImZjVpr8uSXuvbYe6CphHKcooE6UKC - gZHdaOB+KPWPX83LUaz/bH8Jo3furwZJekg0UNnJXsTIoUwiGKq+dfwiRfuA00Rntkl4EJvb7D7LXG3D - SGW5RIJ0E0NLN4xUegFN2GyXU4n5JY3NST6uWC4NjL6XkuXLgdK3iXVNz7/aS2a4qoYQynCKBOkSwiQ9 - mhLjj1KfeHItveNfZG8e4yq9UypXd6A2fJ0+mZ4V6m9R82RJje7PVdRFLmNqkSA5JyzrXejd9wdSX3hT - 6VuCgdEPcJWZM/6Er8RcSXX7upx+bajMMVy8E+FYp0iQvDI8vIFdmlCbX6jtA48+TXZsD6/SkN7T548M - UZKewUVPiXScSyRIDonKlSOprS3dI9+wSl9Tisd25Co7RpRUtqF4fj0pvha1u2Zy0SLSMS6RIDnC3p4a - qvRaqd0evbMU68O4ylwwZ/ixjem7xPVCrK26kIuehPBap0iQXLDuDTQQ51H7nq9tr0efDlT6Ja4wl0Sx - SYS4W5L68yYu9v+QXusSCdJh7O2uYZwWYjnVCDQhvyW2oTXv4mJfR3iNUyRIhyjFozvaiSu10aO5W041 - QhCn5wptadW0dM3oTC4aCdIN8ATIbjml9PN5X07Vg9px4qR2te6zs9Ty7blc6f+nFAnSRgKlD6XJm+2d - fV20nKrHxMlRj28kyjT9hGMkSBsYPzEW64W1bfFsVy6n6lFSZv8wNg8L7W2LSJCMoXetL1Lc/6hth0fX - dPtyqh68d7LdzVFqf6YiQTKCvmccTPHeVRu/V3toOVUPeqN5C03WLC54dIoE8czm/frtYWKulmL3ZqLv - 7sXlVD1mL169CS23fiL2SUYiQTxC7+hnUYzP1cbs0dd6fTnVCNQPi2r6JTORIB4I4spB9KlxpxSvNwu0 - nGqEME4vE/vJs0iQabD5wOh2NHEzXU7RAC0t4nKqEfhqZ7HffIkEaZFQpWdScmS5nFqH5VR9giT9nNR3 - vkSCNAl9Qf4YxYHlVI6gPptLZvLoBiRIg/SVV7yN1r1DUkz+TB/Ccqo1onLlAOrDVZP7dHoiQRogSswZ - VLfH+6gni+XU9JnYi1gvq+3b6YgEcRCW0wPpXf0PUhy+pAFYjOWUP/iT3tuYIUEE7FnbMDGDUv0eXYHl - VDaULh2dSRP7JqHPmxYJUkMUm9Opnmdq6/UpllPtwcfty0gQZuJLnrlDqtOf6RIsp9oL9fuCyePQuIVP - kPFdNVSa6XKKOtlgOdU5JnajlMemnoVOEPvMCSrTPgRfrMuHgdLnc3WggwRlfYo0PvUsZIJEifkwLXcy - Xk7pG7Ccyhc0344RxslpoRKkNLRiK59by0zhI1hO5RM+TyKN2ZQWJkHoU+Pz9KmR6XLKPsiGqwM5ZPzn - e2ncHPZ8gozf06z07VJZvoxifROWU/ln66Glb5bGz2WHE8ScIwXlNKkezYc72eLKsdnjD3GRyvCmeQLL - qe5h9mUPbSKPo8v0Zj68/USJ/rQc1NTan+z48CmhxDiNXmt3LhfL8GJiLuHqQJfQl4xsK46l20V8ePuh - pc9HhYCc0kfeYj58EvZBKpQcv5eO86bSt2A51Z1EqrqXOKYOab59kw9vP0E89i4pqDou48NfZ3ZitqBP - IyW81qdP243MuErQhfAWTNLYTqm9kpsPbz9bLBybLQVV1/WeS2eXU+RT4us8Scn3ba4OdDE0lvfWjm1d - G3xyVWaIQdVTVS4uJXq/KE6zXU4l6W+wnOoNonK6tzjGdfR55UZLhCr9sRRYHb3eFDNJu/lzYuZxiKAH - CGLTL46127/x4Z0jis0RQmCddAGHBnqE8d1nWtsEu3O/YP2XrYeesCdvsnxQZWMm+nb7CDQOC/QQrZyQ - tgZx9WAuorOEcfp9KcA2ucaej+FQQI8RJK1dxUuOcRGdJ4jT+UKAmUv19nMIoAehVcFF0rg3ov3OwsXk - Awoq2+f0rW+i77bnYLhq0IPQOA9PGveGTV/tU+keXFQ+aOWykxZ8LVT6BK4S9CCl2LyHxnkayTHuFVxc - vqDAflsTqDftfSBcDehBJi4j8bKx33P2iWBcbL6gRh4lBDwtg1gvDZU5KXcfmaBl7FW59sJDmxSB0qfa - S9KlsW/Fjl571QihSm+UAoewDaZ2Ew+eivlkllq5JQVaqQkcwuwdTA/kaZhvKNj3TQoewiylZThPv+4g - SCrzxIZA6N10CU+77sLuKSU3CEJ/8nTrToLYHCQ1CsJpq9J7eZp1N0Fidg1ircVGQtiKibmSp1dvMH5b - ract7WGBVelYoNJjeVr1HvbEEDU02xumYC/6nD0JmPvzHD6wZ1KDOD03jM1KoSMgXM/0Vfp7RW4vH8mS - Tfv1rPGbYRJz/+SOgQW3EipzFS4xYuxN+fQd5TvUMStqOgoWx1Wh0t+z283ytAAS4dV6lygxRwZx9WT7 - CRPFaWKv8bIXtcHul5ZNN1MyLKJ/03cKc4bdmqfju48AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOBmxoz/AO6Jz/Y4RFr9AAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAABGdBTUEAALGPC/xhBQAACuNJREFUeF7t - nW2oZlUZhueHYkH9CRGDKCqN/lQiFfijzMI/aYpUPyqjCKSPoQyiD8xSisywog8oKwlDSKnISDOLIisV - IyNBQSP7ssS+jAwmFJS8bzmnMw7Pmjlr1rufvfZe1wUXDHPed++1nmfdMJw9z/vuAQAAAAAAAAAAAACA - TfB0ee2W/jMAbHGx/N8B+u8AhuYN8gF5YDi29c/8GoCheIG8UUahiPRr/R6AVXOEvFRGIdiNfq+vAbA6 - 9sro0B+OvhbAKjhZ3iGjg96ir+lrAyySo+VVMjrcm9T38L0AFsMHZXSYp9T3BOiaM+W9MjrAGfreXgNA - Vxwnr5fRoZ1Dr8VrApidT8rokPag1wYwC2+S+2R0MHvSa/RaAVJ4kbxFRoexZ71mrx1gEp4kL5PR4VuS - 3oP3ArAxzpXRYVuy3hNAE6fK38jogK1B7817BKjiafJbMjpUa9R79Z4BDskFMjpEI+i9A4S8Vv5NRgcn - y0u2jH6WpWvgWgA8xvPkj2R0WLL8vnym3MZ/9t9Fr83SNXFtYFA8ePQZGR2OLP8iz5Al/DO/Jnpvlq4R - Q1qDcY58SEYHIsvz5G7xa6NrZOlauWawcl4ib5XRIcjySvkUWYvf4/dG18zStXMNYWV4oOhyGTU9y9vl - S2UrvoavFd0jS9eSIa2V8F4ZNTnTd8hN42tG98rUtYWF8ir5Oxk1NssvyiPlVPjavkd07yxdY9caFoIH - hb4jo2Zm+XP5fJmF7+V7RmvJ0jVnSKtzLpJR87L8t3y9nAvf22uI1palewCd8UZ5v4waluXHZS94LdEa - s3Qv3BOYGQ8A3SCjJmV5jdz/KXgveE1eW7TmLN0bhrRmwAM/X5BRU7L8ozxN9o7X6LVGe8jSvWJIK4l3 - ykdk1Igs3yeXhtcc7SVL98y9g4nwYM9tMip+llfIJT8g89q9h2hvWbqHDGltEA/yfF1Gxc7y13JN/8XC - e/Geor1m6Z4ypNXIh2RU3Cwflm+Va8V78x6jvWfpHkMlHtj5k4wKmuXn5VFy7XiP3mtUgyzda4a0doEH - dK6TURGz/Ik8QY6G9+y9RzXJ0r1nSCvAAzmfllHRsvynnPMpeC+4Bq5FVKMsfRYY0trCgzgH+yLLDD8q - 4fG4JlGtsvSZGHpIy79JuVlGxcnyavlsCTGujWsU1S5Ln5GhhrT8u/ivyqgYWd4tT5ewO1wr1yyqZZY+ - M6sf0upheGmJT8F7Ye6n8XaVQ1oeqLlTRhvO0mOix0howzWce3zZZ2kVQ1oeoPm2jDaZ5S8l3wa7eVxT - 1zaqeZY+W4sd0pp7eOlB+XYJ0+Iau9ZRD7Jc1JDWy+R9MtpIlp+TT5CQg2vtmke9yNJnzmeve7zIaAMZ - +uMyT5QwD679nB/jSkAK/lWeLaEP3Av3JOrVlBKQwI9J6BP3JurZVBKQ/fQT3uMl9I17lPU0noDIu+TB - PhEd+sQ9c++inm7K4QPyAQnLxj2MersJhw3I1+SxEtaBe+meRr1ucbiA+EntKRLWiXu7yafxwwRkn9wr - YQzca/c8Ogs1DhOQCyWMhXsenYUaCQisFgJSIQEZDwJSIQEZDwJSIQEZDwJSIQEZDwJSIQEZDwJSIQEZ - DwJSIQEZDwJSIQEZDwJSIQEZDwJSIQEZDwJSIQGZlqjmNfprEjYNAamQgExLVPMaCUgDBKR/oprXSEAa - ICD9E9W8RgLSAAHpn6jmNRKQBghI/0Q1r5GANEBA+ieqeY0EpAEC0j9RzWskIA0QkP6Jal4jAWmAgPRP - VPMaCUgDBKR/oprXSEAaICD9E9W8RgLSAAHpn6jmNRKQBghI/0Q1r5GANEBA+ieqeY0EpAEC0j9RzWsk - IA0QkDKuzSZsJap5jQSkAS8yWnyNaw5ItN8aCUhZArJwCEgZAlIhASlLQMoSkIVDQMoQkAoJSFkCUpaA - LBwCUoaAVEhAyhKQsgRk4RCQMgSkQgJSloCUJSALh4CUISAVEpCyBKQsAVk4BKQMAamQgJQlIGUJyMIh - IGUISIUEpCwBKUtAFg4BKUNAKpwiIG5qq60QkDIEpMKpAhLdq8ZWCEgZAlIhASlLQMoSkAYIyA7RdWsk - IA0QkDIEpAwBqZCAlCUgZQlIAwRkh+i6NRKQBghIGQJShoBUSEDKEpCyBKQBArJDdN0aCUgDBKQMASlD - QCokIGUJSFkC0gAB2SG6bo0EpAECUoaAlCEgFRKQsgSkLAFpgIDsEF23RgLSAAEpQ0DKEJAKpwgI9A0B - qZCAjAcBqZCAjAcBqZCAjAcBqZCAjAcBqZCAjAcBqZCAjAcBqZCAjAcBqZCAjAcBqZCAjAcBqZCAjAcB - qZCAjAcBqXCf3CthDNxr9zw6CzUOE5Btb5Uvl7BO3Fv3OOr94ThcQLa9Qj5VwjpwL93TqNctDhuQbc+T - sGzcw6i3m3D4gNjfyrMkLAv3zL2LeropCch+flc+V0LfuEfuVdTDTUtAAj8hoU/cm6hnU0lACv5dvllC - H7gX7knUqyklIIfwp/LFEubBtXcPot5kuJiA3CejDWR5qXyihBxca9c86kWWPnOLCMg2F8loI1k+KM+V - MC2usWsd9SBLn7VFcry8WkabyvI2eaqEzeKaurZRzbP02fIZWzxnyLtktMksr5THSmjDNXQtoxpn6bPk - M7U63i+jDWf6YQmHh2sX1TRTn6FVc4y8XEabz/L38tUSdodr5ZpFtczSZ8ZnZxhOlr+QUTGy/J58joQY - 18Y1imqXpc+Iz8qwvE3+R0bFyfJTEh6PaxLVKkufCZ8NEEfIz8qoUFneL98iR8c1cC2iGmXps+AzAQdw - gvyhjIqW5Y3yhXI0vGfvPapJlu69zwAcgtfJP8uoiFl+RR4l14736L1GNcjSvXbPoZKPyKigWT4s3y3X - ivfmPUZ7z9I9hgaeIb8po+Jmebt8hVwL3ov3FO01S/fUvYUN8Up5h4yKneU35JJ/F++1ew/R3rJ0D91L - mIj3yEdkVPwsl/g0fu6n4O6ZewcJPFleJqNGZHmPXMJsvNfotUZ7yNK9cs8gmZPkTTJqSpY/kMfJ3vCa - vLZozVm6N+4RzMw58l8yalKWPT2Nn/spuHvhnkBnzH0wHpBzzsb73l5DtLYs+W87neOPmblORs3L8hZ5 - oszC9/I9o7Vk6ZrzMUwL4jXyDzJqZpZ+Qn2knApfe+6n4K6xaw0L5QIZNTbTd8lN42tG98rUtYUV4Adk - V8moyVneKU+RrfgavlZ0jyxdy6GGl0bBH7c/9wcN+En20bIWv2fup+CuHV9HMQD+58lDMjoEWZ4vd4tf - G10jS9dqin8mQsd4IOdLMjoQWd4rz5Ql/DO/Jnpvlq4Rw0sD4wGdn8nocGR5vXyW3MZ/9t9Fr83SNWF4 - Cf7P2fIfMjosWV6yZfSzLF0D1wIg5GIZHZwR9N4BDokHea6R0SFao94rw0tQzWnybhkdqjXovXmPAE30 - 8JGpm3b1H+EJuXjgZ4qvLs7We2B4CSbDA0C/ktHh61mvmeElSMMDQf+V0WHsSa+R4SWYjbk/MvVgem0A - s+NBoR/L6JDOodfC8BJ0hweH5vwCU9+b4SXongtldICn1PcEWAweKMr4yFTfg+ElWCweMJpiAtDXZHgJ - VsMmZ8gZXoJV4sGjL8vo0O9Gv5fhJVg9HkS6WUYhiPRrGV6C4fBg0sG+wNQ/Y3gJhica0mJ4CWA/PLB0 - 7ZYMLwEAAAAAAAAAAAAAtLJnz6MA0Kq20Bs4UQAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAABGdBTUEAALGPC/xhBQAACxZJREFUeF7t - nVuodVUZhr2IIIrOEZaQ0U1IlEQiEUZlmppQCEZlhdJBOltIBRl10UVdZFdlUWSJYoZheFFBFxJlSQQl - GSUGYip5IyFCdrio9wV/kNW79r/mGmPOMb/1Pw88sNlr7Xl4v/mtw5xjjn0SAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAC6fIS+RX5S3yd/Lv8h/yAXmnvE1+SL5UQi1cM9fONXQtXVPX - 1jV2rV1z197HgI8FEKfJq+Ud8r8T/bX8pHyBhHXi2rhGrlWq4VH6mPCx4WPkhOPp8gvyEZnCmeLD8mvy - JRLWgd8BXBPXJtVsij5GfKz4mDkheKe8S6YwWnxQ+i0cxnKxvFumGrXoY+ZSedB8Vqad7+kPJYzhyzLV - pKfXyoPEb5Nph+fQXwJhWfzClGoxh/fKg+IDMu3onPoMCSyDz0ylGszpb+VB4M+kaQeX8GcS5uUKmbJf - ws/I0oxsjmN+ScI8vEumzJfUJ31K4tNyc5yt2scLJfTlZOkzhynvJfUxVvIU8D5fyh+T18kr5bny+Y/r - n/07P+bnpL89ylsl9GVN9fW2lMJXP6deBPS587Pl8fBz9jnPzrtIP/Z595izvj7WSl1x95iatCPb3OcV - 3n+TlrXNmyT04SqZMt7mEvX1MVcGDz5LO5G8Ru6L/zYtM/kfCX24R6aMk0vV18dcCU6VaQeSt8tWvIy0 - 7ORFEtq4QKZsk0vX18fe6vF4mbTxmz4qT5eteBleVloHjnNEfUuM1dr1+8cNshdeVloHjnNEfUt8D/GN - L2njN/UXvV5M/dKI8zuivj72Vs+uX9B7nnb1stI6cJwj6lvii7pvoUwbv6nPpffCy0rrwHGOqK+PvdXj - UbRp4zf1FdReeFlpHTjOEfUtMYLbN+Onjd/Uwwt64WWldeA4R9TXx97q8c1KaeM39dibXnhZaR04zhH1 - LXGj3K43z3hgWi+8rLQOHOeI+vrYWz2eOCFt/KYetbnL4LXj4WXsMwIU53VEfUtM2uEJwtLGJz1qs5Up - Iz/PkdDOL2XKd9Ol61tmQsEpE4W13KsxZcTnXyX04TyZMk4uVV8fc2XwbHppJ7a5z4jPKSM97cck9OP3 - MuWcXKK+PubK4Cknp86q51Gbuwxu83OmjPA85osk9ONymXLe5pz19bFWbgpaTz2ZduYoPWrTA9M89sbD - C3wF1fpn/86P7TNy90YJffF94PfJlPc256qvj7VyeK7cNdzU/y95loT+fESmzJfUx1jZeZl3PeU7pz0v - WMH/c71MuS9l+fmYb5Zpx5bQ64b5mXILbk8PZh7mEVNT3i9hGZ4nUw3m9ODmX/6FTDs6h3+QsCxnylSL - OTzYeZeXmMfV/2IBxvAsuc9/C5viwc+37Plc5zi75VcVzwUM4/m6TDVq9YSZZ9nnvj1dZK9G8ZfxMySs - B9d36gyJ2/SQE18rOeFwo/gC0T5nQR6SJ+w/eSzEZdIfi1INj9IT/Xk2zBOyMRJTJiQ7X0ItniN3nfCa - Cf62kMJKQk12bRDYQgorCTWhQRpJYSWhJjRIIymsJNSEBmkkhZWEmtAgjaSwklATGqSRFFYSakKDNJLC - SkJNaJBGUlhJqAkN0kgKKwk1oUEaSWEloSY0SCMprCTUhAZpJIWVhJrQII2ksJJQExqkkRRWEmpCgzSS - wkpCTWiQRlJYSagJDdJICisJNaFBGklhJaEmNEgjKawk1IQGaSSFlYSa0CCNpLCSUBMapJEUVhJqQoM0 - ksJKQk1okEZSWEmoCQ3SSAorCTWhQRpJYSWhJjRIIymsJNSEBmkkhZWEmtAgjaSwklATGqSRFFYSakKD - NJLCSkJNaJBGUlhJqAkN0kgKKwk1oUEaSWEloSY0SCMprCTUhAZpJIWVhJrQII2ksJJQExqkkRRWEmpC - gzSSwkpCTWiQRlJYSagJDdJICisJNaFBGklhJaEmNEgjKawk1IQGaSSFlYSa0CCNpLCSUBMapJEUVhJq - QoM0ksJKQk1okEZSWEmoCQ3SSAorCTWhQRpJYSWhJjRIIymsJNSEBmkkhZWEmtAgjaSwklATGqSRFFYS - akKDNJLCSkJNaJBGUlhJqAkN0kgKKwk1oUEaSWEloSY0SCMprCTUhAZpJIWVhJrQII2ksJJQExqkkRRW - EmpCgzSSwkpCTWiQRlJYSagJDdJICisJNaFBGklhJaEmNEgjKawk1IQGaSSFlYSa0CCNpLCSUBMapJEU - VhJqQoM0ksJKQk1okEZSWEmoCQ3SSAorCTWhQRpJYSWhJjRIIymsJNSEBmkkhZWEmtAgjaSwklATGqSR - FFYSakKDNJLCSkJNaJBGUljJ10uox64N8gYJj/Ny+WH5Z5nC2uZv5NskrJ+z5fdlquM275SfkCfLE5IL - 5a0yhTPFP8lPy6dJWA/vkN+S/5Spbrv6oPQ7zwnTKGfJHo2xqd9RXithLE+SN8lUoxbdKB+VB8375b9l - CqCXH5cwhjPkfTLVpZc3yINk1y9oPfyuhGW5XKZazOFP5UFxsUw7OqfXS1iGS2SqwZz6BfcgGNEcx3yP - hHl5pUzZL2H5JnmZfFimnVvK8yTMwylydH3fLMtyo0w7taQuoF/loC9Plj+RKfMl/ZX0mbNyXCbTDh3l - Y/I6eaU8Vz7/cf2zf+fH/Jz0t0d5s4S+fE6mrI9yrvqW/Kj1c5l2Zpt3S19xPR5+jp+blnGUp0nox70y - 5bzNOevraySlLiT6FSHtyDZ94XAqUy82Xi2hDx4CkjLe5hL1LfUu8h2ZdiJ5jdwX/21aZvIhCX34o0wZ - J5eqr99Fni1Xz1Pkrmc2bpeteBlp2cnzJbRxjkzZJpeur6/HrJ6LZNr4TR+Vp8tWvAwvK60DxzmiviUu - DnsEZ9r4TXuOqfGy0jpwnCPq608uq+cOmTZ+06tkL7ystA4c56j6rv5s1j0ybfimvh+kF15WWgeOc1R9 - XyNXza5f0Ht2upeV1oHjHFXfd8tVkzY66SuovfCy0jpwnKPqu/rrIbteYfXFxF5MvTCJ8zuqvpfKVXOb - TBu+qcfe9MLLSuvAcY6q7+vkqrlWpg3f1APTeuFlpXXgOEfV91S5avwZMG34ph61ucvgtePhZewzAhTn - dVR9V8+rZdrwpEdttjJl5Kebd+1+/gg3H9/8283Hn+i2x3b92yc+nrJNLl3fH8sSTLnLbJ+RnseYOuLz - GRLa+Z5M+SaXrK9HGZfgBzLtwDb3GfE5ZaSn/YaEPky9MLtEfa0/vZTgvTLtwFF61OYug9v8nCkjPI95 - gYQ++J3Yw8tTztucu76+9bYUnrso7chRetSmB6Z57I1fpXwF1fpn/86P7TNyt+VtHjL+TpKyPsq56ms9 - e04p3iTTjozQBYC++MCe+i4yl/5IX5Jvy7RDS3qLhHnY511kDst899jkqdLT2KedWsK/yedKmI99Pkr3 - 1E1amhfLtGNL+AoJ8/OITPnPrYc1HQRnyrSDc/oqCctxl0x1mNODwmNkHpBpR3v7RgnLM/X6175+Ux4k - z5T+0px2uof+JzpvkTCOr8hUm15+UB48HhJwv0wB7OsXpaccgvH4/o2pM2seT787lT1btQ+eGdyzHaYw - dvUv0o3hWeRhfbxd/kim2u2qr5CXuwjYE3838V1gvo9kl7sRPRDS8x95kjDeMWrgf83m07G7znjjs1N+ - /upvfhqBv6d4PM5b5RXyU/J90hPSEVh9Xig9w6Vf4PxPOd0IfoF0bVd/sxMAAAAAAAAAAAAAAAAAAAAA - AAAAAAD056ST/gf7TVmPL+UzfQAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAABGdBTUEAALGPC/xhBQAAE79JREFUeF7t - nXvQdmVVh/nHmTRNDY+oWZ7NIhBNJbTE0goVD4HHxFMqiUGKeErSAENUTFHMtMw8pI4nEMhj4jk1z4qG - IGOhopWpmTnOOPq7vnlXs9qzv9sp1rq/9338XTPXJHcze73P8+219733fvbv3ssYY4wxxhhjjDHGGGOM - McYYY4wxxhhjzI7g1+T95B/Kp1hb4DHyvvJX5Y7k5vIv5DflD6xt9D8k+9q+ctuzvzxbrn0Qa7t9g/xF - uS35E7n2RyNnks/Ic60tkH1pNDt5nNw2XFaeI5d/5MXyBHljaUwHN5VPk1+Ry/3vFXJb8Lcy/2Ffl0dJ - Y2bBQZqbQN+SeV98rtyjcDch/0EfkNeUxuwJfk5+VOZ9krtde4Rrye/J+EM+Ii8jjdmTXE5+VsZ++W35 - 03I6L5fxR/y79JnDbBduKGmM2D+fIadyIxnF0dccZrvBDaK8j15FTuN4GYX/hQFjthlXlPmi/cFyGvlC - 6EQGmriCfLT8sqTWf8tT5HVlFz8vufsRn+98+VDZyW/Ks2TU5H//uuziOvIk+Z+Sel+Vx8qfkl3cXb5b - xmd8lTxQdvISGfXeyMAM2GmjKP6S7OL9MtcKue/NTYJq+CVA7DRLXyk7OFKu1cMHyGquLeOAs/R9soM8 - 41h6Z9nFITLqcDaZwvL6g7sGHTxL5jpL3yWruUiu1QqrT9P8Zm2tTvb6spL3yrU6IQ/eKjlYrtUJ2XGv - ITvgTJlrTbkOOUhGQaY8HVxZ5g/Gke1ekqejefyXZRUPk3nbp8nflfmW4QWyktfJ2DYPWJlOMtXJP6M4 - XVax3Fl5yHu4zE3Dv+nlZRUcyGLbnPl/X3JG+c7WGPIzpS6iBt6CgW5+Q0ZBbu92sDyyXkkG58kYfyQD - ReQzFj+dCfaTMY75b7m0fFrGdo9mYIvjZIx/iIEi8nTu8wxswQVtjOMtZRWXyNgurz0EXEvGeP6+q2Ef - jTrsu+3MaBCmFVEDbyaBnxTk3908RFaR58kfZ2CL35IxjvwNVXBmjO3me/V/JmO8cirJU+XY7r/J+CzL - 7/sXZBXc5Ijt5h8R5udonEm7mN4g3F2JgnzJXXxJRh0+JFONC9MY8tOCKpbTD5rkryRTjhirvoj9U5lr - 8nPtfDcLeUGoCu7+5W3zfb5A5p3oa7KSF8lck7tX71yMdT5HYx+NOp13Bv+HO8ooyLy5iwfJqLMm/7DV - /L1cqxXeTlZydZl3zqUcJCqndPDncq1WyPdeyfVkvt5Ymqd6HbCPRi323XZmTLGCJ8qolf1L2cHe8m1y - WY+31riY7eAAuXb3jGutmFpW8hPyb+SyHj5WdsBr12u3lvn9Hg3UycZOsYIbSBrlTZKfD3AB3w1HmlMl - U54/kFeVnbDTHiF51sLro4fJbrgDyMPCMyU3BX5WdsJDyEfI10imy4fKGUyfYt1JRsHOKZYxFXD2j/11 - yhTLDWJ2Em4QYwa4QYwZ4AYxZoAbxJgBbhBjBrhBjBngBjFmgBvEmAFuEGMGuEGMGeAGMWaAG8SYAW4Q - Ywa4QYwZ4AYxZoAbxJgB0xtk5jvpAXGnt5G32vVfcyABhGWGK5NTfhTE7fD+NjlVM2DJitvKmSvEkjPG - 9/qTu/6rn+nvpM9sEEIUCGiIevgFyVmsi1+RLBKZa5LbtI/s4uEyvzuNnWmDN5HL6J33SNb86+IxMuce - /9fWWDcb2yBE4nxORq2l95TVkEC+VgtZ5oGGreY5cq0eniGrIX7zG3KtHovO0DzV5JC4pYRUdLKxDfJ2 - GXUwZ7wiR9zKlENSPTiqxfZpiE+l/8YXykrI/s3b/4TMgXlYeSAgczdvn++QaNNcj2ywSlhcM2//w5Jw - ujzGtLKL6Q0yI/aHuXHUwHtLYJH4nHRY+YE53cd2+QckQBtyJOm/MlBIzuD6OwYEaflvlTFeuZzx7WVs - F0nqh/vLPF65pt/HZGyXPC4gAogFX2O88ywyPfZnRoMwDYgamCFsLMYrF7bJebivZmCL5XIPZFhVkaeQ - +bM8SsY4yetV5LRKFkHKxDhyIKoi76B3Y2CLP5Ix/mYGmtjIBuH6I2ogUxHgAjqP30VWkacCF8tYoIdQ - 6RjnIrMSdozYNisg0Xxc5+TlCCqDnQmLi+1ihPCxJEEerwzK+0cZ22XFJ2CGwHQyxslA7mJ6g8y6BsnJ - 55hT3ZGdtXIqQARm3j4u4zIJXq5kuSYJGbbLxfCrF+1hubW8/eX3ujyzXFqW8bGsfZKnyXhX2cXGXqTz - TGD5RWarQ5Yhn/aXcl3CikXVLG8+ZKsvmOG35Vot5PuuXmSGs2I+WyztXPoApjcITyOjYPeTdMKb88KP - yBGIi8ouOGIvj7Jc97D2dgfciXumzPXwZbLyLl2Gi3VS1XM9ni/dWnZAQj0X4rkePk92wz4a9Tb2SXo8 - YcbKadUIrneox/+dAU/P4zOy0u4MuCahHk+2Z8AagfEZCSWfwfQziH+LZXYS/rGiMQPcIMYMcIMYM8AN - YswAN4gxA9wgxgxwgxgzwA1izAA3iDED3CDGDHCDGDPADWLMADeIMQPcIMYMcIMYM8ANYswAN4gxA6Y3 - yOxXbkkb4Z3tt0jC1R4ouzlMElFDfu1LJe/Gd0KwwTHytfJcebLsfrWY12xJinyHfL08WHZCWPXjJfFG - fK9PkYSSdzP9lduZDbLMawoJWiadrxpCEs6RazWJr+mALNyL5LIe3+0dZAdrAQr4YtnBAfISuaxHrBLv - xXeysQ1yuIw6a0aMZSVnybVaIdPLSjiCLnOpsiS4VJ9JTpVrtcKjZCUE8C2zvrI0SSfTG2RGsiJ8UUYd - jrBPlUwFYgwrEwCXqY1nSmpemMaY5lVygsw1SXo/ReYQbRIfq2AJh1yPBEemOjn9kM9byQtkrklS5bJJ - Izmzg41MVlzm4RL7E+S0Q64VqvhjGdslBytgmhPjJB9WkgOcaYyA/x3jZzNQBFGtsV2mPHENwGJBMY4k - 3VeR87eOY2AL4kZj/K8ZaGIjzyDMWaMG5mlGTgs/goEi8lEt75RkVMU4VnKejO0ezcAW/O8Yr0xXzMst - XMDAFtwkiHGsXCMkL3VwPwa2yGfPHBZezfQzyIwGYR2LqIEsB0DY2JPSGO4vq8jJ53is5OyR1yn5rKyE - rN/YNrcj7yFZD4S1SWKc1Pkq2PFju3i65HvNC9wQP1pJ/v44+99Z3keylESME/naxUZOsYB1MaLOmtye - rISz1O5WXgqr84Dzd7k7q9dI/LhcqxOeJCu5r1yrExJCXnktuWT6FGtWg7CAzfkyamU/KTu+1EPkWj18 - tuwgX28sPVRWw/VdPqpmeQ7TAc+S1urRHAfJTja2QYDnEixmGf+gNAx3XViFqYsby7hbxkU5d3ponE5I - XP+gpCZz9jfIzgU1ryZZHJXPR01uSnSk5Wc4k0TKO1OtV0puDnQzvUH8UxOzk/BvsYwZ4AYxZoAbxJgB - bhBjBrhBjBngBjFmgBvEmAFuEGMGuEGMGeAGMWaAG8SYAW4QYwa4QYwZ4AYxZoAbxJgBbhBjBrhBjBng - BjFmwPQGmflOOpDlFMl/RNIQMnZ12QXpJs+XkZdLwuORshOC8Qh1jnfv/0ESLt0FOVgE5f2TpB4HOt79 - Z7yLW8g3y0iOIaT7lrKbjQ5teI2MWlnqEuhWDYENF8u1mmRzdUA65Fo9fKysZm+5u+gf0mI6QsF/T67V - w4fITja2QXIU6Jqfk9WwzbVa4ZNlJdeXa3Wyt5KVcBRfqxMS0VMJ6e1rdbI3lF1sbIN8W0YdQqNvL0ke - jzGsPEWTaJi3TbIiNZn6xFiO66zgRTK2TUbU3SURQDkPjOleFcsYVVIbSVYkYTGPV061iDCK7X5JEqF0 - V5nP1EQ5dbGRDbKvjBp4JRlEfhQ+goEiWLQmtssaIcHyKF85BclTnZzintdF4XqkinvL2C5NmIlxJBu5 - itwIOcX9eBnjb2KgiR+LBsnXG3lZhMrkwafL2C4B2UFeFoGzWiURpIbUD3KwM0fgKnK6O9m4ke7OTY8Y - x2vKKjhrxHbzNVVeFoGVrrqY3iAzwquBxWOiDtMP4vK5UI4xrEzmo9nytjnCEgua/4HfLStZTm1Icj9t - MVYZ7MzZL2+boztrkuSU+eoFbZY3WlhGj4bIYw+TXWxseHU+Ba/5XFnNp+VarZCzSSXLtPWlpLxXr+P3 - BLlWK8xLFFTATYa1OmHHzZbMxp5BYHehx1zcdsDdlLzgS8iKT1xAd8CSB5whlzVZ6Ynrnw64KF7Ww0fJ - DriVu1aPqWzldG6N6WeQmQ0CxP/zD3eGZPFJ7rp0c6B8mmTNwhPlNWQnrADLuhksosmUpGtHzbCKFNM3 - PuOzZOetVrii5E4ha0sSXP1QOYPpDeKfmpidhH+LZcwAN4gxA9wgxgxwgxgzwA1izAA3iDED3CDGDHCD - GDPADWLMADeIMQPcIMYMcIMYM8ANYswAN4gxA9wgxgxwgxgzwA1izIDpDTIrtCHD66iEDTxy13/1s488 - QpLueDADE9hPEoxHTV4z7ubK8j6StMjDGZgAKYvHSGp2v4seTA9toAujYPcZhC90GaLwBdn5QR8vcz18 - tewKzOZ9dN7RXtbsTBukMfi3y/WINCKbuAOC/86UuR5BGMfJbvLn3KgzyP6SLzFqLb2brIaE87VaSGAd - wc/VvFeu1UNiT6u5v1yrhQTjVTfJZeUoTqkroSaYfgaZ1SDvl1EH37X4b4LlLierWEaMkkn1qcUY4XWV - PFzm7ZO0mIPqsHL6Q3BcnpOT+PGh9N9YHY73JJm3/2H5tcVY51IP0xtkRuwP89OogWTKAuto5LNKZYzL - Y2Rsl39A5uhANE6ME9dZydtkbJvEQaDpcwL7y2UVhHHHdvFGEphy5XHWSKmC7KvYLpE/QKN+QMY4Idpd - bGQuFoutRA3M5C+2Mryaf6TYLtccwfLMUpl0mJdbyDlRfK4Y5/NW8SAZ2/0oA4kYx5szUETeQfO0OB94 - OsOrN7JBlmHKkQqeg6Sx8qKLdPXYLpm115LwDBnjnFkqyWcKrjdYdoDrnHxd8gpZxXKtjmiEnCaPlQn2 - sToYvoQBwQwhB3c/W3YxvUFmXYO8T0adNYnrjGlQBdeTa3Wyr5KVENq8VifLUb+Sr8q1OiE7dCVPlGt1 - sqTOd7GxF+lcb7AmYdRaWr3jQD7tL+XscR1ZzfLmQ5a092pYoGetFvJ9M72thLNiPlssfZ3sZHqDzHwO - cjPJXZWoh9y94lZlFw+Wy6PsR2RXdi23QZ8pcz18meT/1wEX62vPl24tO+A5CLnKuR4+T3azsc9BMpxN - CK3GyjssI7jeoV71kge7g3Dn+IwdC5SuwTUJ9Tpvs2auIuMz3oCBCUw/g/i3WGYn4R8rGjPADWLMADeI - MQPcIMYMcIMYM8ANYswAN4gxA9wgxgxwgxgzwA1izAA3iDED3CDGDHCDGDPADWLMADeIMQPcIMYMcIMY - M2B6g8x+5Za0Ed7ZfoskXO2BspvDJBE175Qvlbwb3wnBBoQ6v1aeK0+WvJ7aCa/ZvlC+Q75e8p56J2QQ - k3tMvBHfK9nDlRlju2P6K7czG2SZ1xS+R1ZmNwWEJJwj12oSX9PBTeRFclmPs3PXP+hagAK+WHZwgLxE - Lut9WfJefCcb2yBk0kadNTvS+M6Sa7XCe8pKOIJ+Ra7Vwm/JCLCr4lS5Vit8nKyEv5/PsVYL+fwEVnSx - sQ3yzzLqcIR9qmQqEGO4r6ziIJm3TVw/NS9MY4RZV3KCzDWfI0+RhOLF2ImyimXmMQmOTHVy+iE7cyXP - l7kmSZXLJq1uysz0BpkRPUoGVdTAfA2Q08+PZKAIFq6J7ZKDFbCAToxj5bw55wzTGMHxMsa5RqiChYhi - u0x54rNcV8Y4svREFbn58nogJOXHOAejLjYym5c5a9TAnIWV08Irw6vzUe1sBrYgoyrG8fKyivNkbPdo - BrZ4tIzxygYh4zi2ewEDW3CTIMaxskFyQN0DGNginz3PYKCJ6Q2Sj6jcQuuAnTBq4FslYWPLtSYqL/By - 8jkeK+8g357G+MeuhKzf2Dbf5T0k1zmsTRLjp8kquCEQ28XTJd8rSyzkcRqmirx6FomV5PCy3AJLScR4 - 52pa35BRp/tO3S6Y90dB7IJU81xnaeWRFThL5S9zzeo84Hw9tzur1ytk+rhWJzxJVkJDrNUJud66quyA - u5K5Vvft+l1cTeaizF87ILn9fJlrhZ+UHV/qIXKtHnZF9HPtsVYPD5XVcH2Xj95ZnsN0sJY9jDQHN0e6 - WF7Lzoqt/V+rPHUGSXMEYN3AmEfSMJyOK5deW8Iafewo1PuO5E5PZzw/cPH8QUlNUuRJPL+p7IKDC2sD - 8vmoyVmlIy0/Q7NHyjvPP5jWdR1cA4LIqYeEnk+Dp6FRuHrNDGOqyPtpXjWsnXxB+135M9KY7QQzge/J - 2E+5MTANnnzmp6Od97GN+f/ATZzYP/nZDr8Fm8qTZfwBeJQ0ZjuwfBzA+pPToSO52Mp/CM8NjNmTsJJu - 3if5mdIeg1VS404IMufjp+LG7Am4a/V9GfsjlwFci+xR1haF5EeFPLU1Zgb8NIlfW+R9kEcRB8ptAX/I - 2vLCn5H8mpOXgX5Hxvp01l4aeRWC36vxUhu/KVvud/wSfD+5rdhHjpY0tnaGvNOzt9y28GT9Ry1Wb221 - X5RcoO8YuKPFyzGsc86vYHnUv/bBrP2/yo9K+dkR77bzQtltpTHGGGOMMcYYY4wxxhhjjDHGGGOMMcYY - 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 } }