修复一部分工具图像转换问题以及内存释放问题。以及合并史工提交的相机和用户设计模块
已修改11个文件
762 ■■■■ 文件已修改
LB_SmartVision/Forms/Pages/CameraPage/CameraForm.Designer.cs 59 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/Forms/Pages/CameraPage/CameraForm.resx 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/Forms/Pages/CameraPage/CamerasEditPage.Designer.cs 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/Forms/Pages/CameraPage/CamerasEditPage.cs 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/Forms/Pages/CameraPage/CreateCameraForm.Designer.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/Forms/Pages/CameraPage/CreateCameraForm.resx 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/Forms/Pages/MotionControlPage/MotionControlForm.Designer.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/Forms/Pages/MotionControlPage/MotionControlForm.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/Forms/Pages/UserManagementPage/UserManagementEditPage.Designer.cs 409 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/Forms/Pages/UserManagementPage/UserManagementEditPage.cs 145 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/VisionForm.Designer.cs 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/Forms/Pages/CameraPage/CameraForm.Designer.cs
@@ -78,7 +78,7 @@
            uiComboBoxBrand.Margin = new Padding(4, 5, 4, 5);
            uiComboBoxBrand.MinimumSize = new Size(63, 0);
            uiComboBoxBrand.Name = "uiComboBoxBrand";
            uiComboBoxBrand.Size = new Size(260, 24);
            uiComboBoxBrand.Size = new Size(260, 28);
            uiComboBoxBrand.TabIndex = 24;
            uiComboBoxBrand.SelectedIndexChanged += cob_Brand_SelectedIndexChanged;
            // 
@@ -86,10 +86,10 @@
            // 
            uiRadioButtonSoftTrigger.Dock = DockStyle.Fill;
            uiRadioButtonSoftTrigger.Font = new Font("宋体", 12F);
            uiRadioButtonSoftTrigger.Location = new Point(3, 55);
            uiRadioButtonSoftTrigger.Location = new Point(3, 54);
            uiRadioButtonSoftTrigger.MinimumSize = new Size(1, 1);
            uiRadioButtonSoftTrigger.Name = "uiRadioButtonSoftTrigger";
            uiRadioButtonSoftTrigger.Size = new Size(368, 46);
            uiRadioButtonSoftTrigger.Size = new Size(368, 45);
            uiRadioButtonSoftTrigger.TabIndex = 25;
            uiRadioButtonSoftTrigger.Text = "软触发";
            uiRadioButtonSoftTrigger.CheckedChanged += uiRadioButtonSoftTrigger_CheckedChanged;
@@ -98,10 +98,10 @@
            // 
            uiRadioButtonHardTrigger.Dock = DockStyle.Fill;
            uiRadioButtonHardTrigger.Font = new Font("宋体", 12F);
            uiRadioButtonHardTrigger.Location = new Point(3, 159);
            uiRadioButtonHardTrigger.Location = new Point(3, 156);
            uiRadioButtonHardTrigger.MinimumSize = new Size(1, 1);
            uiRadioButtonHardTrigger.Name = "uiRadioButtonHardTrigger";
            uiRadioButtonHardTrigger.Size = new Size(368, 46);
            uiRadioButtonHardTrigger.Size = new Size(368, 45);
            uiRadioButtonHardTrigger.TabIndex = 26;
            uiRadioButtonHardTrigger.Text = "硬触发";
            // 
@@ -162,7 +162,7 @@
            tableLayoutPanel2.Controls.Add(tableLayoutPanel5, 0, 6);
            tableLayoutPanel2.Controls.Add(tableLayoutPanel6, 0, 7);
            tableLayoutPanel2.Dock = DockStyle.Fill;
            tableLayoutPanel2.Location = new Point(0, 51);
            tableLayoutPanel2.Location = new Point(0, 55);
            tableLayoutPanel2.Name = "tableLayoutPanel2";
            tableLayoutPanel2.RowCount = 9;
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Percent, 10F));
@@ -174,7 +174,7 @@
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Percent, 10F));
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Percent, 10F));
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Percent, 10F));
            tableLayoutPanel2.Size = new Size(374, 470);
            tableLayoutPanel2.Size = new Size(374, 466);
            tableLayoutPanel2.TabIndex = 17;
            // 
            // tableLayoutPanel3
@@ -189,7 +189,7 @@
            tableLayoutPanel3.Name = "tableLayoutPanel3";
            tableLayoutPanel3.RowCount = 1;
            tableLayoutPanel3.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
            tableLayoutPanel3.Size = new Size(368, 46);
            tableLayoutPanel3.Size = new Size(368, 45);
            tableLayoutPanel3.TabIndex = 0;
            // 
            // uiMarkLabel1
@@ -200,7 +200,7 @@
            uiMarkLabel1.Location = new Point(3, 0);
            uiMarkLabel1.Name = "uiMarkLabel1";
            uiMarkLabel1.Padding = new Padding(5, 0, 0, 0);
            uiMarkLabel1.Size = new Size(94, 46);
            uiMarkLabel1.Size = new Size(94, 45);
            uiMarkLabel1.TabIndex = 25;
            uiMarkLabel1.Text = "品牌";
            uiMarkLabel1.TextAlign = ContentAlignment.MiddleLeft;
@@ -215,11 +215,11 @@
            tableLayoutPanel1.Controls.Add(uiButtonStartSoftGrab, 1, 0);
            tableLayoutPanel1.Controls.Add(uiButtonCloseSoftGrab, 2, 0);
            tableLayoutPanel1.Dock = DockStyle.Fill;
            tableLayoutPanel1.Location = new Point(3, 107);
            tableLayoutPanel1.Location = new Point(3, 105);
            tableLayoutPanel1.Name = "tableLayoutPanel1";
            tableLayoutPanel1.RowCount = 1;
            tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
            tableLayoutPanel1.Size = new Size(368, 46);
            tableLayoutPanel1.Size = new Size(368, 45);
            tableLayoutPanel1.TabIndex = 30;
            // 
            // uiButtonGrabOnce
@@ -229,7 +229,7 @@
            uiButtonGrabOnce.Location = new Point(3, 3);
            uiButtonGrabOnce.MinimumSize = new Size(1, 1);
            uiButtonGrabOnce.Name = "uiButtonGrabOnce";
            uiButtonGrabOnce.Size = new Size(116, 40);
            uiButtonGrabOnce.Size = new Size(116, 39);
            uiButtonGrabOnce.TabIndex = 31;
            uiButtonGrabOnce.Text = "单张采集";
            uiButtonGrabOnce.Click += uiButtonGrabOnce_Click;
@@ -241,7 +241,7 @@
            uiButtonStartSoftGrab.Location = new Point(125, 3);
            uiButtonStartSoftGrab.MinimumSize = new Size(1, 1);
            uiButtonStartSoftGrab.Name = "uiButtonStartSoftGrab";
            uiButtonStartSoftGrab.Size = new Size(116, 40);
            uiButtonStartSoftGrab.Size = new Size(116, 39);
            uiButtonStartSoftGrab.TabIndex = 31;
            uiButtonStartSoftGrab.Text = "连续采集";
            uiButtonStartSoftGrab.Click += uiButtonStartSoftGrab_Click;
@@ -253,7 +253,7 @@
            uiButtonCloseSoftGrab.Location = new Point(247, 3);
            uiButtonCloseSoftGrab.MinimumSize = new Size(1, 1);
            uiButtonCloseSoftGrab.Name = "uiButtonCloseSoftGrab";
            uiButtonCloseSoftGrab.Size = new Size(118, 40);
            uiButtonCloseSoftGrab.Size = new Size(118, 39);
            uiButtonCloseSoftGrab.TabIndex = 31;
            uiButtonCloseSoftGrab.Text = "关闭采集";
            uiButtonCloseSoftGrab.Click += uiButtonCloseSoftGrab_Click;
@@ -262,10 +262,10 @@
            // 
            uiButtonStartHardGrab.Dock = DockStyle.Fill;
            uiButtonStartHardGrab.Font = new Font("宋体", 12F);
            uiButtonStartHardGrab.Location = new Point(3, 211);
            uiButtonStartHardGrab.Location = new Point(3, 207);
            uiButtonStartHardGrab.MinimumSize = new Size(1, 1);
            uiButtonStartHardGrab.Name = "uiButtonStartHardGrab";
            uiButtonStartHardGrab.Size = new Size(368, 46);
            uiButtonStartHardGrab.Size = new Size(368, 45);
            uiButtonStartHardGrab.TabIndex = 27;
            uiButtonStartHardGrab.Text = "等待硬件触发";
            uiButtonStartHardGrab.Click += uiButtonStartHardGrab_Click;
@@ -278,11 +278,11 @@
            tableLayoutPanel4.Controls.Add(uiMarkLabel2, 0, 0);
            tableLayoutPanel4.Controls.Add(uiTextBoxExp, 1, 0);
            tableLayoutPanel4.Dock = DockStyle.Fill;
            tableLayoutPanel4.Location = new Point(3, 263);
            tableLayoutPanel4.Location = new Point(3, 258);
            tableLayoutPanel4.Name = "tableLayoutPanel4";
            tableLayoutPanel4.RowCount = 1;
            tableLayoutPanel4.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
            tableLayoutPanel4.Size = new Size(368, 46);
            tableLayoutPanel4.Size = new Size(368, 45);
            tableLayoutPanel4.TabIndex = 28;
            // 
            // uiMarkLabel2
@@ -293,7 +293,7 @@
            uiMarkLabel2.Location = new Point(3, 0);
            uiMarkLabel2.Name = "uiMarkLabel2";
            uiMarkLabel2.Padding = new Padding(5, 0, 0, 0);
            uiMarkLabel2.Size = new Size(94, 46);
            uiMarkLabel2.Size = new Size(94, 45);
            uiMarkLabel2.TabIndex = 31;
            uiMarkLabel2.Text = "曝光(us)";
            uiMarkLabel2.TextAlign = ContentAlignment.MiddleLeft;
@@ -306,7 +306,7 @@
            uiTextBoxExp.Margin = new Padding(4, 5, 4, 5);
            uiTextBoxExp.MinimumSize = new Size(1, 16);
            uiTextBoxExp.Name = "uiTextBoxExp";
            uiTextBoxExp.Size = new Size(260, 26);
            uiTextBoxExp.Size = new Size(260, 30);
            uiTextBoxExp.TabIndex = 31;
            uiTextBoxExp.Text = "1000";
            uiTextBoxExp.TextChanged += uiTextBoxExp_TextChanged;
@@ -319,11 +319,11 @@
            tableLayoutPanel5.Controls.Add(uiMarkLabel3, 0, 0);
            tableLayoutPanel5.Controls.Add(uiTextBoxGain, 1, 0);
            tableLayoutPanel5.Dock = DockStyle.Fill;
            tableLayoutPanel5.Location = new Point(3, 315);
            tableLayoutPanel5.Location = new Point(3, 309);
            tableLayoutPanel5.Name = "tableLayoutPanel5";
            tableLayoutPanel5.RowCount = 1;
            tableLayoutPanel5.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
            tableLayoutPanel5.Size = new Size(368, 46);
            tableLayoutPanel5.Size = new Size(368, 45);
            tableLayoutPanel5.TabIndex = 29;
            // 
            // uiMarkLabel3
@@ -334,7 +334,7 @@
            uiMarkLabel3.Location = new Point(3, 0);
            uiMarkLabel3.Name = "uiMarkLabel3";
            uiMarkLabel3.Padding = new Padding(5, 0, 0, 0);
            uiMarkLabel3.Size = new Size(94, 46);
            uiMarkLabel3.Size = new Size(94, 45);
            uiMarkLabel3.TabIndex = 31;
            uiMarkLabel3.Text = "增益";
            uiMarkLabel3.TextAlign = ContentAlignment.MiddleLeft;
@@ -347,7 +347,7 @@
            uiTextBoxGain.Margin = new Padding(4, 5, 4, 5);
            uiTextBoxGain.MinimumSize = new Size(1, 16);
            uiTextBoxGain.Name = "uiTextBoxGain";
            uiTextBoxGain.Size = new Size(260, 26);
            uiTextBoxGain.Size = new Size(260, 30);
            uiTextBoxGain.TabIndex = 32;
            uiTextBoxGain.Text = "1";
            uiTextBoxGain.TextChanged += uiTextBoxGain_TextChanged;
@@ -360,11 +360,11 @@
            tableLayoutPanel6.Controls.Add(uiMarkLabel4, 0, 0);
            tableLayoutPanel6.Controls.Add(uiTextBoxGrabTime, 1, 0);
            tableLayoutPanel6.Dock = DockStyle.Fill;
            tableLayoutPanel6.Location = new Point(3, 367);
            tableLayoutPanel6.Location = new Point(3, 360);
            tableLayoutPanel6.Name = "tableLayoutPanel6";
            tableLayoutPanel6.RowCount = 1;
            tableLayoutPanel6.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
            tableLayoutPanel6.Size = new Size(368, 46);
            tableLayoutPanel6.Size = new Size(368, 45);
            tableLayoutPanel6.TabIndex = 31;
            // 
            // uiMarkLabel4
@@ -375,7 +375,7 @@
            uiMarkLabel4.Location = new Point(3, 0);
            uiMarkLabel4.Name = "uiMarkLabel4";
            uiMarkLabel4.Padding = new Padding(5, 0, 0, 0);
            uiMarkLabel4.Size = new Size(94, 46);
            uiMarkLabel4.Size = new Size(94, 45);
            uiMarkLabel4.TabIndex = 31;
            uiMarkLabel4.Text = "耗时(ms)";
            uiMarkLabel4.TextAlign = ContentAlignment.MiddleLeft;
@@ -389,7 +389,7 @@
            uiTextBoxGrabTime.Margin = new Padding(4, 5, 4, 5);
            uiTextBoxGrabTime.MinimumSize = new Size(1, 16);
            uiTextBoxGrabTime.Name = "uiTextBoxGrabTime";
            uiTextBoxGrabTime.Size = new Size(260, 26);
            uiTextBoxGrabTime.Size = new Size(260, 30);
            uiTextBoxGrabTime.TabIndex = 31;
            // 
            // uiSplitContainer1
@@ -451,8 +451,7 @@
            // 
            // CameraForm
            // 
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            AutoScaleMode = AutoScaleMode.None;
            ClientSize = new Size(900, 600);
            Controls.Add(themeForm1);
            FormBorderStyle = FormBorderStyle.None;
LB_SmartVision/Forms/Pages/CameraPage/CameraForm.resx
@@ -121,24 +121,24 @@
  <data name="themeForm1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
    <value>
        iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
        vQAADr0BR/uQrQAAA+JJREFUWEftVkuIHGUQbt34iMEoq2S2q3p3yTJsuqpnJ+L6WBRdwaigohfFgEou
        BkVBUPCBCEG8BXNQ48GLeImCehIJxMsqhsSZruod46K4HtSIGjU+4iOr0c1I9fSsM3/PLNtCPO0H36m/
        evz/X11VnreKVRTAHPOZumkY6lFwqURws3BwZ8ywTQnuiCP/+iTCzY1qaUPzdm/Atf3PaHre6XPsjyQM
        2xLGV4XwIyX4QRj+UMK/lPFvJTyhBMeV8IgQvmRJuH4Ko+l5p9UjGBbCJ5RxTgj+VMZmXxKcSAjekHE/
        NNs5DgaTKLinEQYVO4Trf1mkV81wixLUslPmA3bzF2XcKeP+hWY/u3n0fCXcrQwLyjAvjNsb1dI6N05P
        mFAIHlHG73sEypPgGwnhfpn0zzH7jzddcK4Q7kqfKNMI4a9K+MwBDgbdeF04MBWsFYYdQvhbLlBvfhKT
        f+vMtLfG7C0JJXxKGY67WnvCmPAFGRs7z42boul5AzHBfdK6TjdQtzPGk8oos5F/5Y7sfVvPhg+lp+1h
        0yIsxARPmtaN78WEl8eEX+SNclxUhne0glUrNrN9zfMGlPAuZTzaQ99FYfwuDv3ruoLvq5bWaQSvZCfL
        GXUYLwrj240Qxtu2lkSN4FpdWfKZH9jb9RQ1Cq62f9sVOlxUxn3KQXnJ0PO8QxU/jBm1h74v7ZniEG9K
        Hdg/quzvXO709k0Y3u08ucGqWgheX862H4XgxbR47SqU8D1X0EXC2VmGizqDz0xPr0kYH9eO360gNe0b
        jWppozB+1kOQEb5MCLa0C64NoeGrhOGrvH6lhK81GiIvnggmrDLzgvTkvwvDA+5wsU4nhG/m9AUoBD/F
        HFzWN4H0XQn2vF8eXN8Z3FAPYasl59oUYjuB+sTImDB+nhfgYQ39STf4fmu1DHtz+oIUgiM1KkWtwcFw
        sOujVT3hrnaL7UQc+hcL5W+sKIXhw0OVjaW0iwnBc47gqIQ45QY32PKRzv8eTguRYM9SS5YouEEZjv37
        EffbzbjBDdZyxZYQ12EB2qS0bWrJqRVazPDWkojwZbuZrsgZtDJ0iY1g12khEtTicMTvclwn2CKE32YJ
        7G5PORfZ1HtMCH7MOV4BrQ3XCe92+4onk5Nn2PolDAvWXnuOzAwzo6Nnx4Q3SrojwqfKeMxWMpsXWVs+
        2WrfKRdbW1W6Hf0shM/33Y7my4PrleFZIfhAaWjU/e5ivlw+y3S2FySMtynjvcrwsFiLJv/RhPBB2ws1
        hK2WcBLBFf1qawlplwvxaQlxe786OOU4PBWsjSO85mBlQ8n99r/BisSdAas4FfgHpdEUZpwUX7sAAAAA
        SUVORK5CYII=
        vAAADrwBlbxySQAAA+xJREFUWEftV0loFUkYbvcNFzJi0lWdBEPQruqXKEYdcRgz4AYqeplBwYiXEUVB
        UHAhCEG8iR509OBlmIsOjJ5EBvQSRVHzuvslxjAy8eCG+75GozF+f716L6873fqe2ykffDR59e9/1V8V
        ow99KARtUg72J5aypGNN8xy2yJPWcleylb5gS13HnJdy+KSW6uJx3b8ZA7TKl6PbMPq3SbMsBUcpyf/2
        BP8PDh96kr32BX/rS/4O30789grfO1j/k4LQ6p8POO6XdFgpDNbDSZsn2Bt8u2MpWGdKsCPeBNMm3TZp
        FaUc6/cW20pQEtpsflCllmwxjDbpLKOd9vAZuBPOx5J+86TyMdDbBxsdYLsn+SpUZYQy/imQILLdBIP3
        cxzEU7Dbns3WejXmcNK/NPGHkajabtUiLYO/nyOgXWdRFeUkDmdnWMOg2ACFFwEn8fzfFeaSxlpjIOlT
        EHC0HVm/CstSC13B93sVFaOVszDQpwGuYGtQLipnQDlMyLzH12t2zJ8adH/TbeMbVLYROmmyDvjYRrLK
        aS4Q3Y/gtWjFALtg6KSf4NW02Uj3HwSPzOuw9iAk24sI/p5rm3OV0wyOo+++ww7pzCIViVjvAk+02GyC
        VlWnpUmw2Qggn+AV0eZ/A61oEtYsOttRwjlE5vy4L61KrabQmjBtV3I/JPtRUptcmy9UBuiM+tLc+bHs
        aQ1Rn8rNnEC7Gpvr8KcqF0XoHVCbl0qB8p2OEspS8OZmySZrvwqNtbUDMRm3Yj9kj1uB9NXcwLkfjwyu
        RAhoshuYcHMyGy4DT5T+jKrcjNbJh+yW75QIw62yqhDAvUghwV/Cybrw5UKTDn08GqmTJ9GCx660pscG
        oPoq2MHzlUWjtN8skjZbRsGFdQpiJoBkVVkFnF3tLcCv+7ZZo31mcYZGLY5RL/kCiQrcaRLFTvrikOxc
        YJF2PeZ5ZsTmAkNkCtaiW1YAkcTF1sT4YjXFEM3ekMADz+YztM8AULqlqE5nSL5wor3Zkew51nxU4WnP
        Ij9DlVGLIWCtDhV6FzBWIJH9a3pNaZOGQRsNT6tjWSHB/6LK6OUA/ETJVER/O9dgwcQ7w7XLTG0yjSTO
        Onp7Ny3A92VuuTD0rbcFbXsUMJonaQwnBV8Rniu4y2sGYbEe5emA8cORV6ZGY3n5UNycC9AKvBHZZRh+
        iqxoX9BlRWMZozvLLiSEV5V6HT2Bjz9iX0ftaAWE9sDoBV+UlOufY9FeWTmE5OhdgLH8Kxyvhv5GON3q
        C3NzSvD19C70MTco4JTDZsbtrSzUlLP5DnBV3D745riOp5nr8F/OJcYV65++P2iTfNV/MPoQCcP4AKXR
        FGYxo/VGAAAAAElFTkSuQmCC
</value>
  </data>
</root>
LB_SmartVision/Forms/Pages/CameraPage/CamerasEditPage.Designer.cs
@@ -100,8 +100,8 @@
            tableLayoutPanel1.ColumnCount = 1;
            tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
            tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 20F));
            tableLayoutPanel1.Controls.Add(uiFlowLayoutPanel1, 0, 0);
            tableLayoutPanel1.Controls.Add(tableLayoutPanel2, 0, 1);
            tableLayoutPanel1.Controls.Add(uiFlowLayoutPanel1, 0, 0);
            tableLayoutPanel1.Dock = DockStyle.Fill;
            tableLayoutPanel1.Location = new Point(0, 0);
            tableLayoutPanel1.Name = "tableLayoutPanel1";
@@ -132,8 +132,6 @@
            // 
            // CamerasEditPage
            // 
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            BackColor = Color.FromArgb(32, 41, 50);
            Controls.Add(tableLayoutPanel1);
            Name = "CamerasEditPage";
LB_SmartVision/Forms/Pages/CameraPage/CamerasEditPage.cs
@@ -137,16 +137,11 @@
                if (name != Name)
                    continue;
                RemoveFlowEvent(flow);
                uiFlowLayoutPanel1.Controls.Remove(uiFlowLayoutPanel1.Controls[i]);
                if (GlobalVar.dicCameras.TryRemove(name, out BaseCamera BaseCamera))
                if (GlobalVar.dicCameras.ContainsKey(name))
                {
                    BaseCamera.Dispose();
                    LogInfo?.Invoke(string.Format("移除相机[{0}]", name), LogInfoType.INFO);
                    MotionControlPage.MotionControlForm cameraForm = new MotionControlPage.MotionControlForm(GlobalVar.dicCameras[name]);
                    cameraForm.Show();
                }
                else
                    LogInfo?.Invoke(string.Format("移除相机[{0}]失败", name), LogInfoType.ERROR);
            }
        }
LB_SmartVision/Forms/Pages/CameraPage/CreateCameraForm.Designer.cs
@@ -105,7 +105,7 @@
            uiComboBoxBrand.Margin = new Padding(4, 5, 4, 5);
            uiComboBoxBrand.MinimumSize = new Size(63, 0);
            uiComboBoxBrand.Name = "uiComboBoxBrand";
            uiComboBoxBrand.Size = new Size(150, 24);
            uiComboBoxBrand.Size = new Size(150, 28);
            uiComboBoxBrand.TabIndex = 11;
            uiComboBoxBrand.SelectedIndexChanged += uiComboBoxBrand_SelectedIndexChanged;
            uiComboBoxBrand.MouseClick += uiComboBoxBrand_MouseClick;
@@ -117,7 +117,7 @@
            uiComboBoxSN.Margin = new Padding(4, 5, 4, 5);
            uiComboBoxSN.MinimumSize = new Size(63, 0);
            uiComboBoxSN.Name = "uiComboBoxSN";
            uiComboBoxSN.Size = new Size(150, 24);
            uiComboBoxSN.Size = new Size(150, 28);
            uiComboBoxSN.TabIndex = 12;
            uiComboBoxSN.MouseClick += uiComboBoxSN_MouseClick;
            // 
@@ -160,8 +160,7 @@
            // 
            // CreateCameraForm
            // 
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            AutoScaleMode = AutoScaleMode.None;
            ClientSize = new Size(507, 309);
            ControlBox = false;
            Controls.Add(uiComboBoxSN);
@@ -172,9 +171,8 @@
            Controls.Add(uiLabel2);
            Controls.Add(uiLabel1);
            Controls.Add(themeForm1);
            ForeColor = SystemColors.ControlText;
            FormBorderStyle = FormBorderStyle.None;
            MaximizeBox = false;
            MinimizeBox = false;
            MinimumSize = new Size(261, 61);
            Name = "CreateCameraForm";
            Text = "创建相机";
LB_SmartVision/Forms/Pages/CameraPage/CreateCameraForm.resx
@@ -121,24 +121,24 @@
  <data name="themeForm1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
    <value>
        iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
        wgAADsIBFShKgAAAA+JJREFUWEftVkuIHGUQbt34iMEoq2S2q3p3yTJsuqpnJ+L6WBRdwaigohfFgEou
        BkVBUPCBCEG8BXNQ48GLeImCehIJxMsqhsSZruod46K4HtSIGjU+4iOr0c1I9fSsM3/PLNtCPO0H36m/
        evz/X11VnreKVRTAHPOZumkY6lFwqURws3BwZ8ywTQnuiCP/+iTCzY1qaUPzdm/Atf3PaHre6XPsjyQM
        2xLGV4XwIyX4QRj+UMK/lPFvJTyhBMeV8IgQvmRJuH4Ko+l5p9UjGBbCJ5RxTgj+VMZmXxKcSAjekHE/
        NNs5DgaTKLinEQYVO4Trf1mkV81wixLUslPmA3bzF2XcKeP+hWY/u3n0fCXcrQwLyjAvjNsb1dI6N05P
        mFAIHlHG73sEypPgGwnhfpn0zzH7jzddcK4Q7kqfKNMI4a9K+MwBDgbdeF04MBWsFYYdQvhbLlBvfhKT
        f+vMtLfG7C0JJXxKGY67WnvCmPAFGRs7z42boul5AzHBfdK6TjdQtzPGk8oos5F/5Y7sfVvPhg+lp+1h
        0yIsxARPmtaN78WEl8eEX+SNclxUhne0glUrNrN9zfMGlPAuZTzaQ99FYfwuDv3ruoLvq5bWaQSvZCfL
        GXUYLwrj240Qxtu2lkSN4FpdWfKZH9jb9RQ1Cq62f9sVOlxUxn3KQXnJ0PO8QxU/jBm1h74v7ZniEG9K
        Hdg/quzvXO709k0Y3u08ucGqWgheX862H4XgxbR47SqU8D1X0EXC2VmGizqDz0xPr0kYH9eO360gNe0b
        jWppozB+1kOQEb5MCLa0C64NoeGrhOGrvH6lhK81GiIvnggmrDLzgvTkvwvDA+5wsU4nhG/m9AUoBD/F
        HFzWN4H0XQn2vF8eXN8Z3FAPYasl59oUYjuB+sTImDB+nhfgYQ39STf4fmu1DHtz+oIUgiM1KkWtwcFw
        sOujVT3hrnaL7UQc+hcL5W+sKIXhw0OVjaW0iwnBc47gqIQ45QY32PKRzv8eTguRYM9SS5YouEEZjv37
        EffbzbjBDdZyxZYQ12EB2qS0bWrJqRVazPDWkojwZbuZrsgZtDJ0iY1g12khEtTicMTvclwn2CKE32YJ
        7G5PORfZ1HtMCH7MOV4BrQ3XCe92+4onk5Nn2PolDAvWXnuOzAwzo6Nnx4Q3SrojwqfKeMxWMpsXWVs+
        2WrfKRdbW1W6Hf0shM/33Y7my4PrleFZIfhAaWjU/e5ivlw+y3S2FySMtynjvcrwsFiLJv/RhPBB2ws1
        hK2WcBLBFf1qawlplwvxaQlxe786OOU4PBWsjSO85mBlQ8n99r/BisSdAas4FfgHpdEUZpwUX7sAAAAA
        SUVORK5CYII=
        wAAADsABataJCQAAA+xJREFUWEftV0loFUkYbvcNFzJi0lWdBEPQruqXKEYdcRgz4AYqeplBwYiXEUVB
        UHAhCEG8iR509OBlmIsOjJ5EBvQSRVHzuvslxjAy8eCG+75GozF+f716L6873fqe2ykffDR59e9/1V8V
        ow99KARtUg72J5aypGNN8xy2yJPWcleylb5gS13HnJdy+KSW6uJx3b8ZA7TKl6PbMPq3SbMsBUcpyf/2
        BP8PDh96kr32BX/rS/4O30789grfO1j/k4LQ6p8POO6XdFgpDNbDSZsn2Bt8u2MpWGdKsCPeBNMm3TZp
        FaUc6/cW20pQEtpsflCllmwxjDbpLKOd9vAZuBPOx5J+86TyMdDbBxsdYLsn+SpUZYQy/imQILLdBIP3
        cxzEU7Dbns3WejXmcNK/NPGHkajabtUiLYO/nyOgXWdRFeUkDmdnWMOg2ACFFwEn8fzfFeaSxlpjIOlT
        EHC0HVm/CstSC13B93sVFaOVszDQpwGuYGtQLipnQDlMyLzH12t2zJ8adH/TbeMbVLYROmmyDvjYRrLK
        aS4Q3Y/gtWjFALtg6KSf4NW02Uj3HwSPzOuw9iAk24sI/p5rm3OV0wyOo+++ww7pzCIViVjvAk+02GyC
        VlWnpUmw2Qggn+AV0eZ/A61oEtYsOttRwjlE5vy4L61KrabQmjBtV3I/JPtRUptcmy9UBuiM+tLc+bHs
        aQ1Rn8rNnEC7Gpvr8KcqF0XoHVCbl0qB8p2OEspS8OZmySZrvwqNtbUDMRm3Yj9kj1uB9NXcwLkfjwyu
        RAhoshuYcHMyGy4DT5T+jKrcjNbJh+yW75QIw62yqhDAvUghwV/Cybrw5UKTDn08GqmTJ9GCx660pscG
        oPoq2MHzlUWjtN8skjZbRsGFdQpiJoBkVVkFnF3tLcCv+7ZZo31mcYZGLY5RL/kCiQrcaRLFTvrikOxc
        YJF2PeZ5ZsTmAkNkCtaiW1YAkcTF1sT4YjXFEM3ekMADz+YztM8AULqlqE5nSL5wor3Zkew51nxU4WnP
        Ij9DlVGLIWCtDhV6FzBWIJH9a3pNaZOGQRsNT6tjWSHB/6LK6OUA/ETJVER/O9dgwcQ7w7XLTG0yjSTO
        Onp7Ny3A92VuuTD0rbcFbXsUMJonaQwnBV8Rniu4y2sGYbEe5emA8cORV6ZGY3n5UNycC9AKvBHZZRh+
        iqxoX9BlRWMZozvLLiSEV5V6HT2Bjz9iX0ftaAWE9sDoBV+UlOufY9FeWTmE5OhdgLH8Kxyvhv5GON3q
        C3NzSvD19C70MTco4JTDZsbtrSzUlLP5DnBV3D745riOp5nr8F/OJcYV65++P2iTfNV/MPoQCcP4AKXR
        FGYxo/VGAAAAAElFTkSuQmCC
</value>
  </data>
</root>
LB_SmartVision/Forms/Pages/MotionControlPage/MotionControlForm.Designer.cs
@@ -561,6 +561,7 @@
            tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
            tableLayoutPanel1.Size = new Size(368, 39);
            tableLayoutPanel1.TabIndex = 4;
            tableLayoutPanel1.Paint += tableLayoutPanel1_Paint;
            // 
            // textBox1
            // 
LB_SmartVision/Forms/Pages/MotionControlPage/MotionControlForm.cs
@@ -365,5 +365,10 @@
                //LogInfo?.Invoke($"X位置已更新为: {xPosition}", LogInfoType.INFO);
            }
        }
        private void tableLayoutPanel1_Paint(object sender, PaintEventArgs e)
        {
        }
    }
}
LB_SmartVision/Forms/Pages/UserManagementPage/UserManagementEditPage.Designer.cs
@@ -1,19 +1,22 @@

using ReaLTaiizor.Controls;
using Sunny.UI;
using System.Drawing.Printing;
using System.Windows.Forms;
namespace LB_SmartVision.Forms.Pages.UserManagementPage
{
    partial class UserManagementEditPage
    {
        /// <summary>
        /// Required designer variable.
        /// <summary>
        /// 必需的设计器变量。
        /// </summary>
        private System.ComponentModel.IContainer components = null;
        /// <summary>
        /// Clean up any resources being used.
        /// <summary>
        /// 清理所有正在使用的资源。
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
@@ -23,132 +26,356 @@
            base.Dispose(disposing);
        }
        #region Windows Form Designer generated code
        #region 组件设计器生成的代码
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// <summary>
        /// 设计器支持所需的方法 - 不要修改
        /// 使用代码编辑器修改此方法的内容。
        /// </summary>
        private void InitializeComponent()
        {
            btn_Add = new HopeButton();
            btn_Clear = new LostButton();
            uiFlowLayoutPanel1 = new FlowLayoutPanel();
            grpSetting = new ParrotGroupBox();
            tableLayoutPanel1 = new TableLayoutPanel();
            tableLayoutPanel2 = new TableLayoutPanel();
            tableLayoutPanel3 = new TableLayoutPanel();
            textBoxEmployeeID = new TextBox();
            labelEmployeeID = new Label();
            textBoxName = new TextBox();
            labelName = new Label();
            labelPermission = new Label();
            textBoxPassword = new TextBox();
            labelPassword = new Label();
            labelUsername = new Label();
            textBoxUsername = new TextBox();
            comboBoxPermission = new ComboBox();
            dataGridViewUM = new DataGridView();
            tableLayoutPanel4 = new TableLayoutPanel();
            btnDel = new HopeButton();
            btnEdit = new HopeButton();
            btnFind = new HopeButton();
            btnAdd = new ForeverButton();
            grpSetting.SuspendLayout();
            tableLayoutPanel1.SuspendLayout();
            tableLayoutPanel2.SuspendLayout();
            tableLayoutPanel3.SuspendLayout();
            ((System.ComponentModel.ISupportInitialize)dataGridViewUM).BeginInit();
            tableLayoutPanel4.SuspendLayout();
            SuspendLayout();
            // 
            // btn_Add
            // grpSetting
            // 
            btn_Add.BorderColor = Color.FromArgb(220, 223, 230);
            btn_Add.ButtonType = ReaLTaiizor.Util.HopeButtonType.Primary;
            btn_Add.Cursor = Cursors.Hand;
            btn_Add.DangerColor = Color.FromArgb(245, 108, 108);
            btn_Add.DefaultColor = Color.FromArgb(255, 255, 255);
            btn_Add.Dock = DockStyle.Fill;
            btn_Add.Font = new Font("宋体", 12F);
            btn_Add.HoverTextColor = Color.FromArgb(48, 49, 51);
            btn_Add.InfoColor = Color.FromArgb(144, 147, 153);
            btn_Add.Location = new Point(503, 3);
            btn_Add.MinimumSize = new Size(1, 1);
            btn_Add.Name = "btn_Add";
            btn_Add.PrimaryColor = Color.FromArgb(64, 158, 255);
            btn_Add.Size = new Size(95, 38);
            btn_Add.SuccessColor = Color.FromArgb(103, 194, 58);
            btn_Add.TabIndex = 11;
            btn_Add.Text = "增加";
            btn_Add.TextColor = Color.White;
            btn_Add.WarningColor = Color.FromArgb(230, 162, 60);
            //
            // btn_Clear
            //
            btn_Clear.BackColor = Color.FromArgb(45, 45, 48);
            btn_Clear.Cursor = Cursors.Hand;
            btn_Clear.Dock = DockStyle.Fill;
            btn_Clear.Font = new Font("宋体", 12F);
            btn_Clear.ForeColor = Color.White;
            btn_Clear.HoverColor = Color.DodgerBlue;
            btn_Clear.Image = null;
            btn_Clear.Location = new Point(403, 3);
            btn_Clear.MinimumSize = new Size(1, 1);
            btn_Clear.Name = "btn_Clear";
            btn_Clear.Size = new Size(94, 38);
            btn_Clear.TabIndex = 12;
            btn_Clear.Text = "清除";
            //
            // uiFlowLayoutPanel1
            //
            uiFlowLayoutPanel1.BackColor = Color.FromArgb(32, 41, 50);
            uiFlowLayoutPanel1.Dock = DockStyle.Fill;
            uiFlowLayoutPanel1.Font = new Font("宋体", 12F);
            uiFlowLayoutPanel1.ForeColor = SystemColors.Control;
            uiFlowLayoutPanel1.Location = new Point(4, 5);
            uiFlowLayoutPanel1.Margin = new Padding(4, 5, 4, 5);
            uiFlowLayoutPanel1.MinimumSize = new Size(1, 1);
            uiFlowLayoutPanel1.Name = "uiFlowLayoutPanel1";
            uiFlowLayoutPanel1.Padding = new Padding(2);
            uiFlowLayoutPanel1.Size = new Size(599, 293);
            uiFlowLayoutPanel1.TabIndex = 10;
            uiFlowLayoutPanel1.Text = "`";
            grpSetting.BorderColor = Color.DodgerBlue;
            grpSetting.BorderWidth = 1;
            grpSetting.Controls.Add(tableLayoutPanel1);
            grpSetting.Dock = DockStyle.Fill;
            grpSetting.Font = new Font("宋体", 12F, FontStyle.Regular, GraphicsUnit.Point, 134);
            grpSetting.Location = new Point(0, 0);
            grpSetting.Name = "grpSetting";
            grpSetting.ShowText = true;
            grpSetting.Size = new Size(866, 580);
            grpSetting.TabIndex = 6;
            grpSetting.TabStop = false;
            grpSetting.Text = "用户管理设置";
            grpSetting.TextColor = Color.DodgerBlue;
            // 
            // tableLayoutPanel1
            // 
            tableLayoutPanel1.ColumnCount = 1;
            tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
            tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 20F));
            tableLayoutPanel1.Controls.Add(uiFlowLayoutPanel1, 0, 0);
            tableLayoutPanel1.Controls.Add(tableLayoutPanel2, 0, 1);
            tableLayoutPanel1.Controls.Add(tableLayoutPanel2, 0, 0);
            tableLayoutPanel1.Controls.Add(tableLayoutPanel4, 0, 1);
            tableLayoutPanel1.Dock = DockStyle.Fill;
            tableLayoutPanel1.Location = new Point(0, 0);
            tableLayoutPanel1.Location = new Point(3, 26);
            tableLayoutPanel1.Name = "tableLayoutPanel1";
            tableLayoutPanel1.RowCount = 2;
            tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
            tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 50F));
            tableLayoutPanel1.Size = new Size(607, 353);
            tableLayoutPanel1.TabIndex = 13;
            tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 45F));
            tableLayoutPanel1.Size = new Size(860, 551);
            tableLayoutPanel1.TabIndex = 1;
            // 
            // tableLayoutPanel2
            // 
            tableLayoutPanel2.ColumnCount = 6;
            tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 16.666666F));
            tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 16.666666F));
            tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 16.666666F));
            tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 16.666666F));
            tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 16.666666F));
            tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 16.666666F));
            tableLayoutPanel2.Controls.Add(btn_Add, 5, 0);
            tableLayoutPanel2.Controls.Add(btn_Clear, 4, 0);
            tableLayoutPanel2.ColumnCount = 2;
            tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 40F));
            tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 60F));
            tableLayoutPanel2.Controls.Add(tableLayoutPanel3, 0, 0);
            tableLayoutPanel2.Controls.Add(dataGridViewUM, 1, 0);
            tableLayoutPanel2.Dock = DockStyle.Fill;
            tableLayoutPanel2.Location = new Point(3, 306);
            tableLayoutPanel2.Location = new Point(3, 3);
            tableLayoutPanel2.Name = "tableLayoutPanel2";
            tableLayoutPanel2.RowCount = 1;
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
            tableLayoutPanel2.Size = new Size(601, 44);
            tableLayoutPanel2.TabIndex = 11;
            tableLayoutPanel2.Size = new Size(854, 500);
            tableLayoutPanel2.TabIndex = 0;
            //
            // tableLayoutPanel3
            //
            tableLayoutPanel3.ColumnCount = 2;
            tableLayoutPanel3.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 100F));
            tableLayoutPanel3.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
            tableLayoutPanel3.Controls.Add(textBoxEmployeeID, 1, 4);
            tableLayoutPanel3.Controls.Add(labelEmployeeID, 0, 4);
            tableLayoutPanel3.Controls.Add(textBoxName, 1, 3);
            tableLayoutPanel3.Controls.Add(labelName, 0, 3);
            tableLayoutPanel3.Controls.Add(labelPermission, 0, 2);
            tableLayoutPanel3.Controls.Add(textBoxPassword, 1, 1);
            tableLayoutPanel3.Controls.Add(labelPassword, 0, 1);
            tableLayoutPanel3.Controls.Add(labelUsername, 0, 0);
            tableLayoutPanel3.Controls.Add(textBoxUsername, 1, 0);
            tableLayoutPanel3.Controls.Add(comboBoxPermission, 1, 2);
            tableLayoutPanel3.Location = new Point(3, 3);
            tableLayoutPanel3.Name = "tableLayoutPanel3";
            tableLayoutPanel3.RowCount = 5;
            tableLayoutPanel3.RowStyles.Add(new RowStyle(SizeType.Percent, 20F));
            tableLayoutPanel3.RowStyles.Add(new RowStyle(SizeType.Percent, 20F));
            tableLayoutPanel3.RowStyles.Add(new RowStyle(SizeType.Percent, 20F));
            tableLayoutPanel3.RowStyles.Add(new RowStyle(SizeType.Percent, 20F));
            tableLayoutPanel3.RowStyles.Add(new RowStyle(SizeType.Percent, 20F));
            tableLayoutPanel3.Size = new Size(333, 225);
            tableLayoutPanel3.TabIndex = 0;
            //
            // textBoxEmployeeID
            //
            textBoxEmployeeID.Location = new Point(107, 187);
            textBoxEmployeeID.Margin = new Padding(7);
            textBoxEmployeeID.Name = "textBoxEmployeeID";
            textBoxEmployeeID.Size = new Size(219, 30);
            textBoxEmployeeID.TabIndex = 9;
            //
            // labelEmployeeID
            //
            labelEmployeeID.AutoSize = true;
            labelEmployeeID.Dock = DockStyle.Fill;
            labelEmployeeID.ForeColor = Color.White;
            labelEmployeeID.Location = new Point(3, 180);
            labelEmployeeID.Name = "labelEmployeeID";
            labelEmployeeID.Size = new Size(94, 45);
            labelEmployeeID.TabIndex = 8;
            labelEmployeeID.Text = "员工编号";
            labelEmployeeID.TextAlign = ContentAlignment.MiddleLeft;
            //
            // textBoxName
            //
            textBoxName.Location = new Point(107, 142);
            textBoxName.Margin = new Padding(7);
            textBoxName.Name = "textBoxName";
            textBoxName.Size = new Size(219, 30);
            textBoxName.TabIndex = 7;
            //
            // labelName
            //
            labelName.AutoSize = true;
            labelName.Dock = DockStyle.Fill;
            labelName.ForeColor = Color.White;
            labelName.Location = new Point(3, 135);
            labelName.Name = "labelName";
            labelName.Size = new Size(94, 45);
            labelName.TabIndex = 6;
            labelName.Text = "姓名";
            labelName.TextAlign = ContentAlignment.MiddleLeft;
            //
            // labelPermission
            //
            labelPermission.AutoSize = true;
            labelPermission.Dock = DockStyle.Fill;
            labelPermission.ForeColor = Color.White;
            labelPermission.Location = new Point(3, 90);
            labelPermission.Name = "labelPermission";
            labelPermission.Size = new Size(94, 45);
            labelPermission.TabIndex = 4;
            labelPermission.Text = "权限";
            labelPermission.TextAlign = ContentAlignment.MiddleLeft;
            //
            // textBoxPassword
            //
            textBoxPassword.Location = new Point(107, 52);
            textBoxPassword.Margin = new Padding(7);
            textBoxPassword.Name = "textBoxPassword";
            textBoxPassword.Size = new Size(219, 30);
            textBoxPassword.TabIndex = 3;
            //
            // labelPassword
            //
            labelPassword.AutoSize = true;
            labelPassword.Dock = DockStyle.Fill;
            labelPassword.ForeColor = Color.White;
            labelPassword.Location = new Point(3, 45);
            labelPassword.Name = "labelPassword";
            labelPassword.Size = new Size(94, 45);
            labelPassword.TabIndex = 2;
            labelPassword.Text = "密码";
            labelPassword.TextAlign = ContentAlignment.MiddleLeft;
            //
            // labelUsername
            //
            labelUsername.AutoSize = true;
            labelUsername.Dock = DockStyle.Fill;
            labelUsername.ForeColor = Color.White;
            labelUsername.Location = new Point(3, 0);
            labelUsername.Name = "labelUsername";
            labelUsername.Size = new Size(94, 45);
            labelUsername.TabIndex = 0;
            labelUsername.Text = "用户名";
            labelUsername.TextAlign = ContentAlignment.MiddleLeft;
            //
            // textBoxUsername
            //
            textBoxUsername.Location = new Point(107, 7);
            textBoxUsername.Margin = new Padding(7);
            textBoxUsername.Name = "textBoxUsername";
            textBoxUsername.Size = new Size(219, 30);
            textBoxUsername.TabIndex = 1;
            //
            // comboBoxPermission
            //
            comboBoxPermission.DropDownStyle = ComboBoxStyle.DropDownList;
            comboBoxPermission.FormattingEnabled = true;
            comboBoxPermission.Location = new Point(107, 97);
            comboBoxPermission.Margin = new Padding(7);
            comboBoxPermission.Name = "comboBoxPermission";
            comboBoxPermission.Size = new Size(219, 28);
            comboBoxPermission.TabIndex = 5;
            //
            // dataGridViewUM
            //
            dataGridViewUM.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
            dataGridViewUM.Dock = DockStyle.Fill;
            dataGridViewUM.Location = new Point(344, 3);
            dataGridViewUM.Name = "dataGridViewUM";
            dataGridViewUM.RowHeadersWidth = 51;
            dataGridViewUM.Size = new Size(507, 494);
            dataGridViewUM.TabIndex = 1;
            //
            // tableLayoutPanel4
            //
            tableLayoutPanel4.Anchor = AnchorStyles.Top | AnchorStyles.Right;
            tableLayoutPanel4.ColumnCount = 4;
            tableLayoutPanel4.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 25F));
            tableLayoutPanel4.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 25F));
            tableLayoutPanel4.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 25F));
            tableLayoutPanel4.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 25F));
            tableLayoutPanel4.Controls.Add(btnEdit, 1, 0);
            tableLayoutPanel4.Controls.Add(btnFind, 0, 0);
            tableLayoutPanel4.Controls.Add(btnDel, 3, 0);
            tableLayoutPanel4.Controls.Add(btnAdd, 2, 0);
            tableLayoutPanel4.Location = new Point(457, 509);
            tableLayoutPanel4.Name = "tableLayoutPanel4";
            tableLayoutPanel4.RowCount = 1;
            tableLayoutPanel4.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
            tableLayoutPanel4.Size = new Size(400, 39);
            tableLayoutPanel4.TabIndex = 1;
            //
            // btnDel
            //
            btnDel.BorderColor = Color.FromArgb(220, 223, 230);
            btnDel.ButtonType = ReaLTaiizor.Util.HopeButtonType.Primary;
            btnDel.DangerColor = Color.FromArgb(245, 108, 108);
            btnDel.DefaultColor = Color.FromArgb(255, 255, 255);
            btnDel.Font = new Font("Segoe UI", 12F);
            btnDel.HoverTextColor = Color.FromArgb(48, 49, 51);
            btnDel.InfoColor = Color.FromArgb(144, 147, 153);
            btnDel.Location = new Point(303, 3);
            btnDel.Name = "btnDel";
            btnDel.PrimaryColor = Color.FromArgb(64, 158, 255);
            btnDel.Size = new Size(94, 33);
            btnDel.SuccessColor = Color.FromArgb(103, 194, 58);
            btnDel.TabIndex = 3;
            btnDel.Text = "删除";
            btnDel.TextColor = Color.White;
            btnDel.WarningColor = Color.FromArgb(230, 162, 60);
            btnDel.Click += btnDel_Click;
            //
            // btnEdit
            //
            btnEdit.BorderColor = Color.FromArgb(220, 223, 230);
            btnEdit.ButtonType = ReaLTaiizor.Util.HopeButtonType.Primary;
            btnEdit.DangerColor = Color.FromArgb(245, 108, 108);
            btnEdit.DefaultColor = Color.FromArgb(255, 255, 255);
            btnEdit.Font = new Font("Segoe UI", 12F);
            btnEdit.HoverTextColor = Color.FromArgb(48, 49, 51);
            btnEdit.InfoColor = Color.FromArgb(144, 147, 153);
            btnEdit.Location = new Point(103, 3);
            btnEdit.Name = "btnEdit";
            btnEdit.PrimaryColor = Color.FromArgb(64, 158, 255);
            btnEdit.Size = new Size(94, 33);
            btnEdit.SuccessColor = Color.FromArgb(103, 194, 58);
            btnEdit.TabIndex = 2;
            btnEdit.Text = "修改";
            btnEdit.TextColor = Color.White;
            btnEdit.WarningColor = Color.FromArgb(230, 162, 60);
            //
            // btnFind
            //
            btnFind.BorderColor = Color.FromArgb(220, 223, 230);
            btnFind.ButtonType = ReaLTaiizor.Util.HopeButtonType.Primary;
            btnFind.DangerColor = Color.FromArgb(245, 108, 108);
            btnFind.DefaultColor = Color.FromArgb(255, 255, 255);
            btnFind.Font = new Font("Segoe UI", 12F);
            btnFind.HoverTextColor = Color.FromArgb(48, 49, 51);
            btnFind.InfoColor = Color.FromArgb(144, 147, 153);
            btnFind.Location = new Point(3, 3);
            btnFind.Name = "btnFind";
            btnFind.PrimaryColor = Color.FromArgb(64, 158, 255);
            btnFind.Size = new Size(94, 33);
            btnFind.SuccessColor = Color.FromArgb(103, 194, 58);
            btnFind.TabIndex = 1;
            btnFind.Text = "查询";
            btnFind.TextColor = Color.White;
            btnFind.WarningColor = Color.FromArgb(230, 162, 60);
            //
            // btnAdd
            //
            btnAdd.BackColor = Color.Transparent;
            btnAdd.BaseColor = Color.FromArgb(35, 168, 109);
            btnAdd.Font = new Font("Segoe UI", 12F);
            btnAdd.Location = new Point(203, 3);
            btnAdd.Name = "btnAdd";
            btnAdd.Rounded = false;
            btnAdd.Size = new Size(94, 33);
            btnAdd.TabIndex = 4;
            btnAdd.Text = "添加";
            btnAdd.TextColor = Color.FromArgb(243, 243, 243);
            btnAdd.Click += btnAdd_Click;
            // 
            // UserManagementEditPage
            // 
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            BackColor = Color.FromArgb(32, 41, 50);
            Controls.Add(tableLayoutPanel1);
            ForeColor = SystemColors.Control;
            Controls.Add(grpSetting);
            Name = "UserManagementEditPage";
            Size = new Size(607, 353);
            Paint += MESEditPage_Paint;
            Size = new Size(866, 580);
            grpSetting.ResumeLayout(false);
            grpSetting.PerformLayout();
            tableLayoutPanel1.ResumeLayout(false);
            tableLayoutPanel2.ResumeLayout(false);
            tableLayoutPanel3.ResumeLayout(false);
            tableLayoutPanel3.PerformLayout();
            ((System.ComponentModel.ISupportInitialize)dataGridViewUM).EndInit();
            tableLayoutPanel4.ResumeLayout(false);
            ResumeLayout(false);
        }
        #endregion
        private ReaLTaiizor.Controls.HopeButton btn_Add;
        private ReaLTaiizor.Controls.LostButton btn_Clear;
        private FlowLayoutPanel uiFlowLayoutPanel1;
        private ParrotGroupBox grpSetting;
        private TableLayoutPanel tableLayoutPanel1;
        private TableLayoutPanel tableLayoutPanel2;
        private TableLayoutPanel tableLayoutPanel3;
        private Label labelUsername;
        private TextBox textBoxUsername;
        private TextBox textBoxEmployeeID;
        private Label labelEmployeeID;
        private TextBox textBoxName;
        private Label labelName;
        private Label labelPermission;
        private TextBox textBoxPassword;
        private Label labelPassword;
        private ComboBox comboBoxPermission;
        private DataGridView dataGridViewUM;
        private TableLayoutPanel tableLayoutPanel4;
        private HopeButton btnDel;
        private HopeButton btnEdit;
        private HopeButton btnFind;
        private ForeverButton btnAdd;
    }
}
LB_SmartVision/Forms/Pages/UserManagementPage/UserManagementEditPage.cs
@@ -1,30 +1,153 @@
using LB_VisionControl;
using OpenCvSharp.Flann;
using System;
using LB_SmartVision.Forms.Pages.ProcessPage;
using LB_SmartVision.ProcessRun;
using LB_VisionControl;
using LB_VisionProcesses;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using System.Collections.Concurrent;
using System.Data;
using System.Text;
using VisionControl.Forms;
using LB_SmartVision.Forms.Pages.SettingPage;
using LB_SmartVisionCommon;
using static System.Windows.Forms.VisualStyles.VisualStyleElement.StartPanel;
using LB_SmartVision.Forms.Pages.CameraPage;
using System.Security.Principal;
using System.Windows.Forms;
using System.Xml.Linq;
namespace LB_SmartVision.Forms.Pages.UserManagementPage
{
    public partial class UserManagementEditPage : UserControl
    {
        public Action<string, LogInfoType> LogInfo;
        RunSettingPage RunSettingPage = new RunSettingPage();
        LayoutPage LayoutPage = new LayoutPage();
        CsvPage CsvPage = new CsvPage();
        public UserManagementEditPage()
        {
            InitializeComponent();
            Name = "UserManagementEditPage";
            Name = "UserManagementEditPage";
            Text = "用户管理设置";
            InitializeComponent();
            InitializeDataGridView();
            InitializeComboBox();
        }
        private void MESEditPage_Paint(object sender, PaintEventArgs e)
        private void InitializeDataGridView()
        {
            uiFlowLayoutPanel1.Controls.Clear();
            // 设置DataGridView列宽
            dataGridViewUM.ColumnCount = 5;
            int totalWidth = dataGridViewUM.ClientSize.Width;
            int columnCount = dataGridViewUM.ColumnCount;
            int columnWidth = totalWidth / columnCount;
            // 设置最小宽度
            int minWidth = 100; // 最小宽度
            if (columnWidth < minWidth)
            {
                columnWidth = minWidth;
            }
            for (int i = 0; i < columnCount; i++)
            {
                dataGridViewUM.Columns[i].Width = columnWidth;
            }
            // 设置列标题
            dataGridViewUM.Columns[0].Name = "用户名";
            dataGridViewUM.Columns[1].Name = "密码";
            dataGridViewUM.Columns[2].Name = "姓名";
            dataGridViewUM.Columns[3].Name = "工号";
            dataGridViewUM.Columns[4].Name = "权限";
            dataGridViewUM.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
            // 禁止编辑单元格(可选)
            dataGridViewUM.ReadOnly = true;
            // 允许多行选择(可选)
            dataGridViewUM.MultiSelect = false;
            // 显示行标题(可选)
            dataGridViewUM.RowHeadersVisible = true;
        }
        private void InitializeComboBox()
        {
            // 添加权限选项
            comboBoxPermission.Items.Add("管理员");
            comboBoxPermission.Items.Add("操作员");
            // 设置默认选择项
            comboBoxPermission.SelectedIndex = 1;
        }
        private void ClearInputFields()
        {
            textBoxUsername.Clear();
            textBoxPassword.Clear();
            textBoxName.Clear();
            textBoxEmployeeID.Clear();
            comboBoxPermission.SelectedIndex = 1;
            textBoxUsername.Focus(); // 将焦点设置回用户名输入框
        }
        private void btnAdd_Click(object sender, EventArgs e)
        {
            // 验证输入
            if (string.IsNullOrWhiteSpace(textBoxUsername.Text) ||
                string.IsNullOrWhiteSpace(textBoxPassword.Text) ||
                string.IsNullOrWhiteSpace(textBoxName.Text) ||
                string.IsNullOrWhiteSpace(textBoxEmployeeID.Text))
            {
                MessageBox.Show("请填写所有必填字段!", "提示",
                    MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            // 创建新行数据
            string[] row = new string[]
            {
                textBoxUsername.Text,
                textBoxPassword.Text, // 实际应用中密码应该加密
                textBoxName.Text,
                textBoxEmployeeID.Text,
                comboBoxPermission.SelectedItem.ToString()
            };
            // 设置整个DataGridView的默认字体和颜色
            dataGridViewUM.DefaultCellStyle.Font = new Font("宋体", 12);
            dataGridViewUM.DefaultCellStyle.ForeColor = Color.Black;  // 字体颜色
            dataGridViewUM.DefaultCellStyle.BackColor = Color.White;   // 背景颜色
            // 添加新行到DataGridView
            dataGridViewUM.Rows.Add(row);
            // 清空输入框
            ClearInputFields();
        }
        private void btnDel_Click(object sender, EventArgs e)
        {
            if (dataGridViewUM.SelectedRows.Count > 0)
            {
                // 确认删除
                DialogResult result = MessageBox.Show("确定要删除选中的行吗?",
                    "确认删除", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (result == DialogResult.Yes)
                {
                    foreach (DataGridViewRow row in dataGridViewUM.SelectedRows)
                    {
                        dataGridViewUM.Rows.Remove(row);
                    }
                }
            }
            else
            {
                MessageBox.Show("请先选择要删除的行!", "提示",
                    MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
    }
}
LB_SmartVision/VisionForm.Designer.cs
@@ -65,7 +65,7 @@
            theme_VisionForm.Padding = new Padding(10, 70, 10, 9);
            theme_VisionForm.RoundCorners = true;
            theme_VisionForm.Sizable = true;
            theme_VisionForm.Size = new Size(1440, 880);
            theme_VisionForm.Size = new Size(1152, 704);
            theme_VisionForm.SmartBounds = true;
            theme_VisionForm.StartPosition = FormStartPosition.WindowsDefaultLocation;
            theme_VisionForm.TabIndex = 0;
@@ -86,8 +86,8 @@
            // sc_VisionForm.Panel2
            // 
            sc_VisionForm.Panel2.Controls.Add(grb_Info);
            sc_VisionForm.Size = new Size(1420, 801);
            sc_VisionForm.SplitterDistance = 618;
            sc_VisionForm.Size = new Size(1132, 625);
            sc_VisionForm.SplitterDistance = 478;
            sc_VisionForm.TabIndex = 1;
            // 
            // tlp_MainView
@@ -99,12 +99,13 @@
            tlp_MainView.Controls.Add(materialTabSelector, 0, 0);
            tlp_MainView.Dock = DockStyle.Fill;
            tlp_MainView.Location = new Point(0, 0);
            tlp_MainView.Margin = new Padding(2);
            tlp_MainView.Name = "tlp_MainView";
            tlp_MainView.RowCount = 3;
            tlp_MainView.RowStyles.Add(new RowStyle(SizeType.Absolute, 60F));
            tlp_MainView.RowStyles.Add(new RowStyle(SizeType.Absolute, 39F));
            tlp_MainView.RowStyles.Add(new RowStyle(SizeType.Absolute, 48F));
            tlp_MainView.RowStyles.Add(new RowStyle(SizeType.Absolute, 31F));
            tlp_MainView.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
            tlp_MainView.Size = new Size(1420, 618);
            tlp_MainView.Size = new Size(1132, 478);
            tlp_MainView.TabIndex = 1;
            tlp_MainView.TagString = null;
            // 
@@ -113,11 +114,12 @@
            materialTabControl.AccessibleRole = AccessibleRole.Sound;
            materialTabControl.Depth = 0;
            materialTabControl.Dock = DockStyle.Fill;
            materialTabControl.Location = new Point(3, 102);
            materialTabControl.Location = new Point(2, 81);
            materialTabControl.Margin = new Padding(2);
            materialTabControl.MouseState = MaterialSkin.MouseState.HOVER;
            materialTabControl.Name = "materialTabControl";
            materialTabControl.SelectedIndex = 0;
            materialTabControl.Size = new Size(1414, 513);
            materialTabControl.Size = new Size(1128, 395);
            materialTabControl.TabIndex = 0;
            // 
            // tlp_VisionMainOperator
@@ -138,11 +140,11 @@
            tlp_VisionMainOperator.Controls.Add(btn_GlobalVar, 7, 0);
            tlp_VisionMainOperator.Controls.Add(com_ProductName, 8, 0);
            tlp_VisionMainOperator.Dock = DockStyle.Fill;
            tlp_VisionMainOperator.Location = new Point(3, 63);
            tlp_VisionMainOperator.Location = new Point(3, 51);
            tlp_VisionMainOperator.Name = "tlp_VisionMainOperator";
            tlp_VisionMainOperator.RowCount = 1;
            tlp_VisionMainOperator.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
            tlp_VisionMainOperator.Size = new Size(1414, 33);
            tlp_VisionMainOperator.Size = new Size(1126, 25);
            tlp_VisionMainOperator.TabIndex = 0;
            tlp_VisionMainOperator.TagString = null;
            // 
@@ -154,7 +156,7 @@
            ckb_AllowRun.Location = new Point(3, 3);
            ckb_AllowRun.MinimumSize = new Size(1, 1);
            ckb_AllowRun.Name = "ckb_AllowRun";
            ckb_AllowRun.Size = new Size(151, 27);
            ckb_AllowRun.Size = new Size(119, 19);
            ckb_AllowRun.TabIndex = 2;
            ckb_AllowRun.Text = "运行模式";
            // 
@@ -169,11 +171,11 @@
            btn_Login.Image = null;
            btn_Login.ImageAlign = ContentAlignment.MiddleLeft;
            btn_Login.InactiveColor = Color.FromArgb(32, 34, 37);
            btn_Login.Location = new Point(160, 3);
            btn_Login.Location = new Point(128, 3);
            btn_Login.Name = "btn_Login";
            btn_Login.PressedBorderColor = Color.FromArgb(165, 37, 37);
            btn_Login.PressedColor = Color.FromArgb(165, 37, 37);
            btn_Login.Size = new Size(151, 27);
            btn_Login.Size = new Size(119, 19);
            btn_Login.TabIndex = 3;
            btn_Login.Text = "用户登录";
            btn_Login.TextAlignment = StringAlignment.Center;
@@ -190,11 +192,11 @@
            btn_GlobalVar.Image = null;
            btn_GlobalVar.ImageAlign = ContentAlignment.MiddleLeft;
            btn_GlobalVar.InactiveColor = Color.FromArgb(32, 34, 37);
            btn_GlobalVar.Location = new Point(1102, 3);
            btn_GlobalVar.Location = new Point(878, 3);
            btn_GlobalVar.Name = "btn_GlobalVar";
            btn_GlobalVar.PressedBorderColor = Color.FromArgb(165, 37, 37);
            btn_GlobalVar.PressedColor = Color.FromArgb(165, 37, 37);
            btn_GlobalVar.Size = new Size(151, 27);
            btn_GlobalVar.Size = new Size(119, 19);
            btn_GlobalVar.TabIndex = 4;
            btn_GlobalVar.Text = "全局变量";
            btn_GlobalVar.TextAlignment = StringAlignment.Center;
@@ -208,9 +210,9 @@
            com_ProductName.EnabledCalc = true;
            com_ProductName.FormattingEnabled = true;
            com_ProductName.ItemHeight = 20;
            com_ProductName.Location = new Point(1259, 3);
            com_ProductName.Location = new Point(1003, 3);
            com_ProductName.Name = "com_ProductName";
            com_ProductName.Size = new Size(152, 26);
            com_ProductName.Size = new Size(120, 26);
            com_ProductName.TabIndex = 5;
            com_ProductName.SelectedValueChanged += com_ProductName_SelectedValueChanged;
            // 
@@ -222,7 +224,7 @@
            materialTabSelector.Location = new Point(3, 3);
            materialTabSelector.MouseState = MaterialSkin.MouseState.HOVER;
            materialTabSelector.Name = "materialTabSelector";
            materialTabSelector.Size = new Size(1414, 54);
            materialTabSelector.Size = new Size(1126, 42);
            materialTabSelector.TabIndex = 1;
            // 
            // grb_Info
@@ -237,7 +239,7 @@
            grb_Info.MinimumSize = new Size(1, 1);
            grb_Info.Name = "grb_Info";
            grb_Info.Padding = new Padding(0, 32, 0, 0);
            grb_Info.Size = new Size(1420, 179);
            grb_Info.Size = new Size(1132, 143);
            grb_Info.TabIndex = 1;
            grb_Info.Text = "日志显示区:";
            grb_Info.TextAlignment = ContentAlignment.MiddleLeft;
@@ -253,7 +255,7 @@
            rich_Info.Name = "rich_Info";
            rich_Info.Padding = new Padding(2);
            rich_Info.ShowText = false;
            rich_Info.Size = new Size(1420, 147);
            rich_Info.Size = new Size(1132, 111);
            rich_Info.TabIndex = 0;
            rich_Info.TextAlignment = ContentAlignment.MiddleLeft;
            // 
@@ -267,7 +269,7 @@
            cb_VisionForm.EnableMaximizeButton = true;
            cb_VisionForm.EnableMinimizeButton = true;
            cb_VisionForm.ForeColor = Color.FromArgb(155, 155, 155);
            cb_VisionForm.Location = new Point(1360, 14);
            cb_VisionForm.Location = new Point(1052, 18);
            cb_VisionForm.MaximizeHoverColor = Color.FromArgb(74, 74, 74);
            cb_VisionForm.MinimizeHoverColor = Color.FromArgb(63, 63, 65);
            cb_VisionForm.Name = "cb_VisionForm";
@@ -279,7 +281,7 @@
            // 
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            ClientSize = new Size(1440, 880);
            ClientSize = new Size(1152, 704);
            Controls.Add(theme_VisionForm);
            FormBorderStyle = FormBorderStyle.None;
            Icon = (Icon)resources.GetObject("$this.Icon");