From 8f8f0ab6c11203ac96a82ed2f6028afa5db86c03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=BE=D0=BB=D0=BE=D0=B4=D1=8F?= Date: Fri, 13 Oct 2023 17:33:04 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B3=D0=BE=D1=82=D0=BE=D0=B2=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- VisEl/KOP.sln | 30 +-- VisEl/Test/App.config | 6 - VisEl/Test/Lab2.Designer.cs | 39 ---- VisEl/Test/Lab2.cs | 20 -- VisEl/Test/Program.cs | 21 -- VisEl/Test/Properties/AssemblyInfo.cs | 36 ---- VisEl/Test/Properties/Resources.Designer.cs | 71 ------- VisEl/Test/Properties/Settings.Designer.cs | 30 --- VisEl/Test/Properties/Settings.settings | 7 - VisEl/Test/Test.csproj | 99 --------- VisEl/{Test => TestForm}/Form1.Designer.cs | 152 ++++++++------ VisEl/{Test => TestForm}/Form1.cs | 7 +- VisEl/TestForm/Form1.resx | 63 ++++++ VisEl/TestForm/Lab2.Designer.cs | 197 ++++++++++++++++++ VisEl/TestForm/Lab2.cs | 110 ++++++++++ VisEl/TestForm/Lab2.resx | 75 +++++++ VisEl/TestForm/Program.cs | 17 ++ .../TestClasses/Sportsmen.cs | 0 VisEl/TestForm/TestForm.csproj | 25 +++ VisEl/TestLib/Car.cs | 23 -- VisEl/TestLib/Employer.cs | 21 -- VisEl/TestLib/Sportsmen.cs | 26 --- VisEl/TestLib/TestLib.csproj | 9 - VisEl/UnvisableComponents.zip | Bin 0 -> 75170 bytes VisEl/UnvisableComponents/ChartInfo.cs | 23 ++ .../DirectionLegend.cs} | 8 +- .../ExcelChart.Designer.cs | 36 ++++ VisEl/UnvisableComponents/ExcelChart.cs | 76 +++++++ .../UnvisableComponents/ExcelHead.Designer.cs | 36 ++++ VisEl/UnvisableComponents/ExcelHead.cs | 145 +++++++++++++ VisEl/UnvisableComponents/ExcelInfo.cs | 44 ++++ .../ImageExcel.Designer.cs | 36 ++++ VisEl/UnvisableComponents/ImageExcel.cs | 76 +++++++ VisEl/UnvisableComponents/ImageInfo.cs | 19 ++ .../UnvisableComponents.csproj | 28 +++ VisEl/UnvisableComponents/appSettings.json | 9 + .../UnvisualComponents.csproj | 9 - .../VisableComponents/MyCheckList.Designer.cs | 65 ++++++ VisEl/VisableComponents/MyCheckList.cs | 61 ++++++ .../MyCheckList.resx} | 3 - .../MyTextBoxDate.Designer.cs | 96 +++++++++ VisEl/VisableComponents/MyTextBoxDate.cs | 84 ++++++++ .../MyTextBoxDate.resx} | 13 +- .../VisableComponents/MyTreeView.Designer.cs | 59 ++++++ VisEl/VisableComponents/MyTreeView.cs | 118 +++++++++++ VisEl/VisableComponents/MyTreeView.resx | 120 +++++++++++ .../VisableComponents.csproj | 22 ++ VisEl/WinFormsApp1/TestForm.csproj | 24 +++ 48 files changed, 1782 insertions(+), 512 deletions(-) delete mode 100644 VisEl/Test/App.config delete mode 100644 VisEl/Test/Lab2.Designer.cs delete mode 100644 VisEl/Test/Lab2.cs delete mode 100644 VisEl/Test/Program.cs delete mode 100644 VisEl/Test/Properties/AssemblyInfo.cs delete mode 100644 VisEl/Test/Properties/Resources.Designer.cs delete mode 100644 VisEl/Test/Properties/Settings.Designer.cs delete mode 100644 VisEl/Test/Properties/Settings.settings delete mode 100644 VisEl/Test/Test.csproj rename VisEl/{Test => TestForm}/Form1.Designer.cs (85%) rename VisEl/{Test => TestForm}/Form1.cs (97%) create mode 100644 VisEl/TestForm/Form1.resx create mode 100644 VisEl/TestForm/Lab2.Designer.cs create mode 100644 VisEl/TestForm/Lab2.cs create mode 100644 VisEl/TestForm/Lab2.resx create mode 100644 VisEl/TestForm/Program.cs rename VisEl/{Test => TestForm}/TestClasses/Sportsmen.cs (100%) create mode 100644 VisEl/TestForm/TestForm.csproj delete mode 100644 VisEl/TestLib/Car.cs delete mode 100644 VisEl/TestLib/Employer.cs delete mode 100644 VisEl/TestLib/Sportsmen.cs delete mode 100644 VisEl/TestLib/TestLib.csproj create mode 100644 VisEl/UnvisableComponents.zip create mode 100644 VisEl/UnvisableComponents/ChartInfo.cs rename VisEl/{UnvisualComponents/ImageExcel.cs => UnvisableComponents/DirectionLegend.cs} (53%) create mode 100644 VisEl/UnvisableComponents/ExcelChart.Designer.cs create mode 100644 VisEl/UnvisableComponents/ExcelChart.cs create mode 100644 VisEl/UnvisableComponents/ExcelHead.Designer.cs create mode 100644 VisEl/UnvisableComponents/ExcelHead.cs create mode 100644 VisEl/UnvisableComponents/ExcelInfo.cs create mode 100644 VisEl/UnvisableComponents/ImageExcel.Designer.cs create mode 100644 VisEl/UnvisableComponents/ImageExcel.cs create mode 100644 VisEl/UnvisableComponents/ImageInfo.cs create mode 100644 VisEl/UnvisableComponents/UnvisableComponents.csproj create mode 100644 VisEl/UnvisableComponents/appSettings.json delete mode 100644 VisEl/UnvisualComponents/UnvisualComponents.csproj create mode 100644 VisEl/VisableComponents/MyCheckList.Designer.cs create mode 100644 VisEl/VisableComponents/MyCheckList.cs rename VisEl/{Test/Form1.resx => VisableComponents/MyCheckList.resx} (96%) create mode 100644 VisEl/VisableComponents/MyTextBoxDate.Designer.cs create mode 100644 VisEl/VisableComponents/MyTextBoxDate.cs rename VisEl/{Test/Properties/Resources.resx => VisableComponents/MyTextBoxDate.resx} (90%) create mode 100644 VisEl/VisableComponents/MyTreeView.Designer.cs create mode 100644 VisEl/VisableComponents/MyTreeView.cs create mode 100644 VisEl/VisableComponents/MyTreeView.resx create mode 100644 VisEl/VisableComponents/VisableComponents.csproj create mode 100644 VisEl/WinFormsApp1/TestForm.csproj diff --git a/VisEl/KOP.sln b/VisEl/KOP.sln index 9b57c0c..992dd22 100644 --- a/VisEl/KOP.sln +++ b/VisEl/KOP.sln @@ -3,11 +3,11 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.3.32825.248 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VisEl", "VisEl\VisEl.csproj", "{471DE73A-592F-45F0-8249-9F6DD539682C}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnvisableComponents", "UnvisableComponents\UnvisableComponents.csproj", "{B720A881-1A22-48BB-B0C6-23F616E6D10D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Test", "Test\Test.csproj", "{D173D582-D0AE-45DF-88FC-0DE0A8183E82}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestForm", "TestForm\TestForm.csproj", "{53DEA306-E3B4-4662-A337-7076CF636F6A}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnvisualComponents", "UnvisualComponents\UnvisualComponents.csproj", "{1AFA08FF-CCF8-46DE-8980-D5C42B313267}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VisableComponents", "VisableComponents\VisableComponents.csproj", "{B0E42147-22BB-4B22-AB76-3C7DB2BF5353}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -15,18 +15,18 @@ Global Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {471DE73A-592F-45F0-8249-9F6DD539682C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {471DE73A-592F-45F0-8249-9F6DD539682C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {471DE73A-592F-45F0-8249-9F6DD539682C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {471DE73A-592F-45F0-8249-9F6DD539682C}.Release|Any CPU.Build.0 = Release|Any CPU - {D173D582-D0AE-45DF-88FC-0DE0A8183E82}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D173D582-D0AE-45DF-88FC-0DE0A8183E82}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D173D582-D0AE-45DF-88FC-0DE0A8183E82}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D173D582-D0AE-45DF-88FC-0DE0A8183E82}.Release|Any CPU.Build.0 = Release|Any CPU - {1AFA08FF-CCF8-46DE-8980-D5C42B313267}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1AFA08FF-CCF8-46DE-8980-D5C42B313267}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1AFA08FF-CCF8-46DE-8980-D5C42B313267}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1AFA08FF-CCF8-46DE-8980-D5C42B313267}.Release|Any CPU.Build.0 = Release|Any CPU + {B720A881-1A22-48BB-B0C6-23F616E6D10D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B720A881-1A22-48BB-B0C6-23F616E6D10D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B720A881-1A22-48BB-B0C6-23F616E6D10D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B720A881-1A22-48BB-B0C6-23F616E6D10D}.Release|Any CPU.Build.0 = Release|Any CPU + {53DEA306-E3B4-4662-A337-7076CF636F6A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {53DEA306-E3B4-4662-A337-7076CF636F6A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {53DEA306-E3B4-4662-A337-7076CF636F6A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {53DEA306-E3B4-4662-A337-7076CF636F6A}.Release|Any CPU.Build.0 = Release|Any CPU + {B0E42147-22BB-4B22-AB76-3C7DB2BF5353}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B0E42147-22BB-4B22-AB76-3C7DB2BF5353}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B0E42147-22BB-4B22-AB76-3C7DB2BF5353}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B0E42147-22BB-4B22-AB76-3C7DB2BF5353}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/VisEl/Test/App.config b/VisEl/Test/App.config deleted file mode 100644 index 56efbc7..0000000 --- a/VisEl/Test/App.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/VisEl/Test/Lab2.Designer.cs b/VisEl/Test/Lab2.Designer.cs deleted file mode 100644 index fcc7616..0000000 --- a/VisEl/Test/Lab2.Designer.cs +++ /dev/null @@ -1,39 +0,0 @@ -namespace Test -{ - partial class Lab2 - { - /// - /// 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.components = new System.ComponentModel.Container(); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(800, 450); - this.Text = "Lab2"; - } - - #endregion - } -} \ No newline at end of file diff --git a/VisEl/Test/Lab2.cs b/VisEl/Test/Lab2.cs deleted file mode 100644 index 9da8b84..0000000 --- a/VisEl/Test/Lab2.cs +++ /dev/null @@ -1,20 +0,0 @@ -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 Test -{ - public partial class Lab2 : Form - { - public Lab2() - { - InitializeComponent(); - } - } -} diff --git a/VisEl/Test/Program.cs b/VisEl/Test/Program.cs deleted file mode 100644 index 1ef7000..0000000 --- a/VisEl/Test/Program.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using System.Windows.Forms; -namespace Test -{ - internal static class Program - { - /// - /// Главная точка входа для приложения. - /// - [STAThread] - static void Main() - { - Application.EnableVisualStyles(); - Application.SetCompatibleTextRenderingDefault(false); - Application.Run(new Form1()); - } - } -} diff --git a/VisEl/Test/Properties/AssemblyInfo.cs b/VisEl/Test/Properties/AssemblyInfo.cs deleted file mode 100644 index badfe69..0000000 --- a/VisEl/Test/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// Общие сведения об этой сборке предоставляются следующим набором -// набора атрибутов. Измените значения этих атрибутов для изменения сведений, -// связанных со сборкой. -[assembly: AssemblyTitle("Test")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("Test")] -[assembly: AssemblyCopyright("Copyright © 2023")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Установка значения False для параметра ComVisible делает типы в этой сборке невидимыми -// для компонентов COM. Если необходимо обратиться к типу в этой сборке через -// COM, следует установить атрибут ComVisible в TRUE для этого типа. -[assembly: ComVisible(false)] - -// Следующий GUID служит для идентификации библиотеки типов, если этот проект будет видимым для COM -[assembly: Guid("d173d582-d0ae-45df-88fc-0de0a8183e82")] - -// Сведения о версии сборки состоят из указанных ниже четырех значений: -// -// Основной номер версии -// Дополнительный номер версии -// Номер сборки -// Редакция -// -// Можно задать все значения или принять номера сборки и редакции по умолчанию -// используя "*", как показано ниже: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/VisEl/Test/Properties/Resources.Designer.cs b/VisEl/Test/Properties/Resources.Designer.cs deleted file mode 100644 index fd90ad5..0000000 --- a/VisEl/Test/Properties/Resources.Designer.cs +++ /dev/null @@ -1,71 +0,0 @@ -//------------------------------------------------------------------------------ -// -// Этот код создан программным средством. -// Версия среды выполнения: 4.0.30319.42000 -// -// Изменения в этом файле могут привести к неправильному поведению и будут утрачены, если -// код создан повторно. -// -//------------------------------------------------------------------------------ - -namespace Test.Properties -{ - - - /// - /// Класс ресурсов со строгим типом для поиска локализованных строк и пр. - /// - // Этот класс был автоматически создан при помощи StronglyTypedResourceBuilder - // класс с помощью таких средств, как ResGen или Visual Studio. - // Для добавления или удаления члена измените файл .ResX, а затем перезапустите ResGen - // с параметром /str или заново постройте свой VS-проект. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources - { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() - { - } - - /// - /// Возврат кэшированного экземпляра ResourceManager, используемого этим классом. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager - { - get - { - if ((resourceMan == null)) - { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Test.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Переопределяет свойство CurrentUICulture текущего потока для всех - /// подстановки ресурсов с помощью этого класса ресурсов со строгим типом. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture - { - get - { - return resourceCulture; - } - set - { - resourceCulture = value; - } - } - } -} diff --git a/VisEl/Test/Properties/Settings.Designer.cs b/VisEl/Test/Properties/Settings.Designer.cs deleted file mode 100644 index a8cf573..0000000 --- a/VisEl/Test/Properties/Settings.Designer.cs +++ /dev/null @@ -1,30 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Test.Properties -{ - - - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] - internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase - { - - private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - - public static Settings Default - { - get - { - return defaultInstance; - } - } - } -} diff --git a/VisEl/Test/Properties/Settings.settings b/VisEl/Test/Properties/Settings.settings deleted file mode 100644 index 3964565..0000000 --- a/VisEl/Test/Properties/Settings.settings +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/VisEl/Test/Test.csproj b/VisEl/Test/Test.csproj deleted file mode 100644 index 04cfae6..0000000 --- a/VisEl/Test/Test.csproj +++ /dev/null @@ -1,99 +0,0 @@ - - - - - Debug - AnyCPU - {D173D582-D0AE-45DF-88FC-0DE0A8183E82} - WinExe - Test - Test - v4.7.2 - 512 - true - true - - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - - - - - - Form - - - Form1.cs - - - Form - - - Lab2.cs - - - - - - Form1.cs - - - ResXFileCodeGenerator - Resources.Designer.cs - Designer - - - True - Resources.resx - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - True - Settings.settings - True - - - - - - - - {471DE73A-592F-45F0-8249-9F6DD539682C} - VisEl - - - - - - - \ No newline at end of file diff --git a/VisEl/Test/Form1.Designer.cs b/VisEl/TestForm/Form1.Designer.cs similarity index 85% rename from VisEl/Test/Form1.Designer.cs rename to VisEl/TestForm/Form1.Designer.cs index acdfd5c..eec0b6b 100644 --- a/VisEl/Test/Form1.Designer.cs +++ b/VisEl/TestForm/Form1.Designer.cs @@ -1,4 +1,4 @@ -namespace Test +namespace TestForm { partial class Form1 { @@ -55,50 +55,52 @@ this.lab2ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.labelChange = new System.Windows.Forms.Label(); this.labelDateChange = new System.Windows.Forms.Label(); - this.myTreeView1 = new VisEl.MyTreeView(); - this.newCheckList1 = new VisEl.MyCheckList(); - this.myTextBoxDate = new VisEl.MyTextBoxDate(); + this.myTreeView1 = new VisableComponents.MyTreeView(); + this.newCheckList1 = new VisableComponents.MyCheckList(); + this.myTextBoxDate = new VisableComponents.MyTextBoxDate(); this.menuStrip1.SuspendLayout(); this.SuspendLayout(); // // textBoxList // - this.textBoxList.Location = new System.Drawing.Point(492, 12); + this.textBoxList.Location = new System.Drawing.Point(492, 15); + this.textBoxList.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); this.textBoxList.Name = "textBoxList"; - this.textBoxList.Size = new System.Drawing.Size(261, 22); + this.textBoxList.Size = new System.Drawing.Size(261, 27); this.textBoxList.TabIndex = 1; // // labelList // this.labelList.AutoSize = true; - this.labelList.Location = new System.Drawing.Point(336, 12); + this.labelList.Location = new System.Drawing.Point(336, 15); this.labelList.Name = "labelList"; - this.labelList.Size = new System.Drawing.Size(120, 16); + this.labelList.Size = new System.Drawing.Size(127, 20); this.labelList.TabIndex = 2; this.labelList.Text = "Создание списка"; // // labelListEl // this.labelListEl.AutoSize = true; - this.labelListEl.Location = new System.Drawing.Point(336, 94); + this.labelListEl.Location = new System.Drawing.Point(336, 118); this.labelListEl.Name = "labelListEl"; - this.labelListEl.Size = new System.Drawing.Size(83, 16); + this.labelListEl.Size = new System.Drawing.Size(91, 20); this.labelListEl.TabIndex = 3; this.labelListEl.Text = "ListElements"; // // elemetsOfList // this.elemetsOfList.AutoSize = true; - this.elemetsOfList.Location = new System.Drawing.Point(425, 94); + this.elemetsOfList.Location = new System.Drawing.Point(425, 118); this.elemetsOfList.Name = "elemetsOfList"; - this.elemetsOfList.Size = new System.Drawing.Size(0, 16); + this.elemetsOfList.Size = new System.Drawing.Size(0, 20); this.elemetsOfList.TabIndex = 4; // // buttonAdd // - this.buttonAdd.Location = new System.Drawing.Point(492, 55); + this.buttonAdd.Location = new System.Drawing.Point(492, 69); + this.buttonAdd.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); this.buttonAdd.Name = "buttonAdd"; - this.buttonAdd.Size = new System.Drawing.Size(145, 23); + this.buttonAdd.Size = new System.Drawing.Size(145, 29); this.buttonAdd.TabIndex = 5; this.buttonAdd.Text = "Добавить в список"; this.buttonAdd.UseVisualStyleBackColor = true; @@ -106,9 +108,10 @@ // // LoadInBox // - this.LoadInBox.Location = new System.Drawing.Point(666, 55); + this.LoadInBox.Location = new System.Drawing.Point(666, 69); + this.LoadInBox.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); this.LoadInBox.Name = "LoadInBox"; - this.LoadInBox.Size = new System.Drawing.Size(87, 23); + this.LoadInBox.Size = new System.Drawing.Size(87, 29); this.LoadInBox.TabIndex = 6; this.LoadInBox.Text = "Загрузить"; this.LoadInBox.UseVisualStyleBackColor = true; @@ -116,9 +119,10 @@ // // buttonClear // - this.buttonClear.Location = new System.Drawing.Point(339, 55); + this.buttonClear.Location = new System.Drawing.Point(339, 69); + this.buttonClear.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); this.buttonClear.Name = "buttonClear"; - this.buttonClear.Size = new System.Drawing.Size(120, 23); + this.buttonClear.Size = new System.Drawing.Size(120, 29); this.buttonClear.TabIndex = 7; this.buttonClear.Text = "Очистить"; this.buttonClear.UseVisualStyleBackColor = true; @@ -126,16 +130,18 @@ // // textBoxTakeValue // - this.textBoxTakeValue.Location = new System.Drawing.Point(339, 147); + this.textBoxTakeValue.Location = new System.Drawing.Point(339, 184); + this.textBoxTakeValue.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); this.textBoxTakeValue.Name = "textBoxTakeValue"; - this.textBoxTakeValue.Size = new System.Drawing.Size(321, 22); + this.textBoxTakeValue.Size = new System.Drawing.Size(321, 27); this.textBoxTakeValue.TabIndex = 8; // // buttonTake // - this.buttonTake.Location = new System.Drawing.Point(339, 193); + this.buttonTake.Location = new System.Drawing.Point(339, 241); + this.buttonTake.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); this.buttonTake.Name = "buttonTake"; - this.buttonTake.Size = new System.Drawing.Size(75, 23); + this.buttonTake.Size = new System.Drawing.Size(75, 29); this.buttonTake.TabIndex = 9; this.buttonTake.Text = "Взять"; this.buttonTake.UseVisualStyleBackColor = true; @@ -143,9 +149,10 @@ // // buttonReplace // - this.buttonReplace.Location = new System.Drawing.Point(461, 192); + this.buttonReplace.Location = new System.Drawing.Point(461, 240); + this.buttonReplace.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); this.buttonReplace.Name = "buttonReplace"; - this.buttonReplace.Size = new System.Drawing.Size(92, 23); + this.buttonReplace.Size = new System.Drawing.Size(92, 29); this.buttonReplace.TabIndex = 10; this.buttonReplace.Text = "Пяоменять"; this.buttonReplace.UseVisualStyleBackColor = true; @@ -153,16 +160,18 @@ // // dateTimePicker // - this.dateTimePicker.Location = new System.Drawing.Point(428, 321); + this.dateTimePicker.Location = new System.Drawing.Point(428, 401); + this.dateTimePicker.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); this.dateTimePicker.Name = "dateTimePicker"; - this.dateTimePicker.Size = new System.Drawing.Size(200, 22); + this.dateTimePicker.Size = new System.Drawing.Size(200, 27); this.dateTimePicker.TabIndex = 12; // // buttonTakeTime // - this.buttonTakeTime.Location = new System.Drawing.Point(701, 286); + this.buttonTakeTime.Location = new System.Drawing.Point(701, 358); + this.buttonTakeTime.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); this.buttonTakeTime.Name = "buttonTakeTime"; - this.buttonTakeTime.Size = new System.Drawing.Size(75, 23); + this.buttonTakeTime.Size = new System.Drawing.Size(75, 29); this.buttonTakeTime.TabIndex = 13; this.buttonTakeTime.Text = "Взять"; this.buttonTakeTime.UseVisualStyleBackColor = true; @@ -170,9 +179,10 @@ // // buttonGiveTime // - this.buttonGiveTime.Location = new System.Drawing.Point(428, 358); + this.buttonGiveTime.Location = new System.Drawing.Point(428, 448); + this.buttonGiveTime.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); this.buttonGiveTime.Name = "buttonGiveTime"; - this.buttonGiveTime.Size = new System.Drawing.Size(75, 23); + this.buttonGiveTime.Size = new System.Drawing.Size(75, 29); this.buttonGiveTime.TabIndex = 14; this.buttonGiveTime.Text = "Загрузить"; this.buttonGiveTime.UseVisualStyleBackColor = true; @@ -181,25 +191,26 @@ // labelTitle // this.labelTitle.AutoSize = true; - this.labelTitle.Location = new System.Drawing.Point(394, 286); + this.labelTitle.Location = new System.Drawing.Point(394, 358); this.labelTitle.Name = "labelTitle"; - this.labelTitle.Size = new System.Drawing.Size(88, 16); + this.labelTitle.Size = new System.Drawing.Size(98, 20); this.labelTitle.TabIndex = 15; this.labelTitle.Text = "Вы выбрали:"; // // labelChecked // this.labelChecked.AutoSize = true; - this.labelChecked.Location = new System.Drawing.Point(508, 285); + this.labelChecked.Location = new System.Drawing.Point(508, 356); this.labelChecked.Name = "labelChecked"; - this.labelChecked.Size = new System.Drawing.Size(0, 16); + this.labelChecked.Size = new System.Drawing.Size(0, 20); this.labelChecked.TabIndex = 16; // // buttonStart // - this.buttonStart.Location = new System.Drawing.Point(684, 743); + this.buttonStart.Location = new System.Drawing.Point(684, 929); + this.buttonStart.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); this.buttonStart.Name = "buttonStart"; - this.buttonStart.Size = new System.Drawing.Size(75, 23); + this.buttonStart.Size = new System.Drawing.Size(75, 29); this.buttonStart.TabIndex = 18; this.buttonStart.Text = "Поехали"; this.buttonStart.UseVisualStyleBackColor = true; @@ -208,16 +219,18 @@ // comboBox1 // this.comboBox1.FormattingEnabled = true; - this.comboBox1.Location = new System.Drawing.Point(517, 432); + this.comboBox1.Location = new System.Drawing.Point(517, 540); + this.comboBox1.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); this.comboBox1.Name = "comboBox1"; - this.comboBox1.Size = new System.Drawing.Size(121, 24); + this.comboBox1.Size = new System.Drawing.Size(121, 28); this.comboBox1.TabIndex = 19; // // buttonAddHier // - this.buttonAddHier.Location = new System.Drawing.Point(678, 412); + this.buttonAddHier.Location = new System.Drawing.Point(678, 515); + this.buttonAddHier.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); this.buttonAddHier.Name = "buttonAddHier"; - this.buttonAddHier.Size = new System.Drawing.Size(75, 23); + this.buttonAddHier.Size = new System.Drawing.Size(75, 29); this.buttonAddHier.TabIndex = 20; this.buttonAddHier.Text = "Добавить"; this.buttonAddHier.UseVisualStyleBackColor = true; @@ -226,25 +239,27 @@ // labelHier // this.labelHier.AutoSize = true; - this.labelHier.Location = new System.Drawing.Point(446, 460); + this.labelHier.Location = new System.Drawing.Point(446, 575); this.labelHier.Name = "labelHier"; - this.labelHier.Size = new System.Drawing.Size(0, 16); + this.labelHier.Size = new System.Drawing.Size(0, 20); this.labelHier.TabIndex = 21; // // listBox1 // this.listBox1.FormattingEnabled = true; - this.listBox1.ItemHeight = 16; - this.listBox1.Location = new System.Drawing.Point(517, 477); + this.listBox1.ItemHeight = 20; + this.listBox1.Location = new System.Drawing.Point(517, 596); + this.listBox1.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); this.listBox1.Name = "listBox1"; - this.listBox1.Size = new System.Drawing.Size(242, 260); + this.listBox1.Size = new System.Drawing.Size(242, 324); this.listBox1.TabIndex = 22; // // buttonGen // - this.buttonGen.Location = new System.Drawing.Point(678, 448); + this.buttonGen.Location = new System.Drawing.Point(678, 560); + this.buttonGen.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); this.buttonGen.Name = "buttonGen"; - this.buttonGen.Size = new System.Drawing.Size(75, 23); + this.buttonGen.Size = new System.Drawing.Size(75, 29); this.buttonGen.TabIndex = 23; this.buttonGen.Text = "Генерир"; this.buttonGen.UseVisualStyleBackColor = true; @@ -252,9 +267,10 @@ // // buttonTakeNode // - this.buttonTakeNode.Location = new System.Drawing.Point(511, 743); + this.buttonTakeNode.Location = new System.Drawing.Point(511, 929); + this.buttonTakeNode.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); this.buttonTakeNode.Name = "buttonTakeNode"; - this.buttonTakeNode.Size = new System.Drawing.Size(75, 23); + this.buttonTakeNode.Size = new System.Drawing.Size(75, 29); this.buttonTakeNode.TabIndex = 24; this.buttonTakeNode.Text = "Достать"; this.buttonTakeNode.UseVisualStyleBackColor = true; @@ -263,9 +279,9 @@ // labelNode // this.labelNode.AutoSize = true; - this.labelNode.Location = new System.Drawing.Point(514, 778); + this.labelNode.Location = new System.Drawing.Point(514, 972); this.labelNode.Name = "labelNode"; - this.labelNode.Size = new System.Drawing.Size(0, 16); + this.labelNode.Size = new System.Drawing.Size(0, 20); this.labelNode.TabIndex = 25; // // menuStrip1 @@ -290,17 +306,17 @@ // this.labelChange.AutoSize = true; this.labelChange.ForeColor = System.Drawing.Color.Red; - this.labelChange.Location = new System.Drawing.Point(336, 128); + this.labelChange.Location = new System.Drawing.Point(336, 160); this.labelChange.Name = "labelChange"; - this.labelChange.Size = new System.Drawing.Size(0, 16); + this.labelChange.Size = new System.Drawing.Size(0, 20); this.labelChange.TabIndex = 27; // // labelDateChange // this.labelDateChange.AutoSize = true; - this.labelDateChange.Location = new System.Drawing.Point(22, 419); + this.labelDateChange.Location = new System.Drawing.Point(22, 524); this.labelDateChange.Name = "labelDateChange"; - this.labelDateChange.Size = new System.Drawing.Size(0, 16); + this.labelDateChange.Size = new System.Drawing.Size(0, 20); this.labelDateChange.TabIndex = 28; // // myTreeView1 @@ -308,9 +324,10 @@ this.myTreeView1.AutoSize = true; this.myTreeView1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; this.myTreeView1.BackColor = System.Drawing.SystemColors.ControlDark; - this.myTreeView1.Location = new System.Drawing.Point(13, 442); + this.myTreeView1.Location = new System.Drawing.Point(13, 552); + this.myTreeView1.Margin = new System.Windows.Forms.Padding(3, 5, 3, 5); this.myTreeView1.Name = "myTreeView1"; - this.myTreeView1.Size = new System.Drawing.Size(427, 403); + this.myTreeView1.Size = new System.Drawing.Size(427, 503); this.myTreeView1.TabIndex = 17; // // newCheckList1 @@ -318,27 +335,29 @@ this.newCheckList1.AutoSize = true; this.newCheckList1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; this.newCheckList1.BackColor = System.Drawing.SystemColors.ActiveBorder; - this.newCheckList1.Location = new System.Drawing.Point(12, 32); + this.newCheckList1.Location = new System.Drawing.Point(12, 40); + this.newCheckList1.Margin = new System.Windows.Forms.Padding(3, 5, 3, 5); this.newCheckList1.Name = "newCheckList1"; this.newCheckList1.selectedValue = ""; - this.newCheckList1.Size = new System.Drawing.Size(285, 248); + this.newCheckList1.Size = new System.Drawing.Size(285, 298); this.newCheckList1.TabIndex = 0; // // myTextBoxDate // this.myTextBoxDate.DateMaximum = null; this.myTextBoxDate.DateMinimum = null; - this.myTextBoxDate.Location = new System.Drawing.Point(20, 286); + this.myTextBoxDate.Location = new System.Drawing.Point(20, 358); + this.myTextBoxDate.Margin = new System.Windows.Forms.Padding(3, 5, 3, 5); this.myTextBoxDate.Name = "myTextBoxDate"; - this.myTextBoxDate.Size = new System.Drawing.Size(316, 95); + this.myTextBoxDate.Size = new System.Drawing.Size(316, 119); this.myTextBoxDate.TabIndex = 29; this.myTextBoxDate.Value = null; // // Form1 // - this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(800, 867); + this.ClientSize = new System.Drawing.Size(800, 1055); this.Controls.Add(this.myTextBoxDate); this.Controls.Add(this.labelDateChange); this.Controls.Add(this.labelChange); @@ -369,6 +388,7 @@ this.Controls.Add(this.newCheckList1); this.Controls.Add(this.menuStrip1); this.MainMenuStrip = this.menuStrip1; + this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); this.Name = "Form1"; this.Text = "Form1"; this.menuStrip1.ResumeLayout(false); @@ -380,7 +400,7 @@ #endregion - private VisEl.MyCheckList newCheckList1; + private VisableComponents.MyCheckList newCheckList1; private System.Windows.Forms.TextBox textBoxList; private System.Windows.Forms.Label labelList; private System.Windows.Forms.Label labelListEl; @@ -396,7 +416,7 @@ private System.Windows.Forms.Button buttonGiveTime; private System.Windows.Forms.Label labelTitle; private System.Windows.Forms.Label labelChecked; - private VisEl.MyTreeView myTreeView1; + private VisableComponents.MyTreeView myTreeView1; private System.Windows.Forms.Button buttonStart; private System.Windows.Forms.ComboBox comboBox1; private System.Windows.Forms.Button buttonAddHier; @@ -409,7 +429,7 @@ private System.Windows.Forms.ToolStripMenuItem lab2ToolStripMenuItem; private System.Windows.Forms.Label labelChange; private System.Windows.Forms.Label labelDateChange; - private VisEl.MyTextBoxDate myTextBoxDate; + private VisableComponents.MyTextBoxDate myTextBoxDate; } } diff --git a/VisEl/Test/Form1.cs b/VisEl/TestForm/Form1.cs similarity index 97% rename from VisEl/Test/Form1.cs rename to VisEl/TestForm/Form1.cs index dad6497..673b415 100644 --- a/VisEl/Test/Form1.cs +++ b/VisEl/TestForm/Form1.cs @@ -4,15 +4,14 @@ using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; -using System.Management.Instrumentation; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using TestLib; -using VisEl; +using VisableComponents; using static System.Windows.Forms.VisualStyles.VisualStyleElement; -namespace Test +namespace TestForm { public partial class Form1 : Form { @@ -38,7 +37,7 @@ namespace Test } private void CustomEvent_Handler(object sender, EventArgs e) { - labelChange.Text = "oп оп я поменялся"; + MessageBox.Show("Данные поменялись"); } private void CustomEvent_HandlerDate(object sender, EventArgs e) { diff --git a/VisEl/TestForm/Form1.resx b/VisEl/TestForm/Form1.resx new file mode 100644 index 0000000..938108a --- /dev/null +++ b/VisEl/TestForm/Form1.resx @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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/VisEl/TestForm/Lab2.Designer.cs b/VisEl/TestForm/Lab2.Designer.cs new file mode 100644 index 0000000..513b310 --- /dev/null +++ b/VisEl/TestForm/Lab2.Designer.cs @@ -0,0 +1,197 @@ +namespace TestForm +{ + partial class Lab2 + { + /// + /// 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.components = new System.ComponentModel.Container(); + this.imageExcel1 = new UnvisableComponents.ImageExcel(this.components); + this.buttonOne = new System.Windows.Forms.Button(); + this.labelPathTitle = new System.Windows.Forms.Label(); + this.labelImages = new System.Windows.Forms.Label(); + this.buttonTakePath = new System.Windows.Forms.Button(); + this.openFileDialogPath = new System.Windows.Forms.OpenFileDialog(); + this.labelPath = new System.Windows.Forms.Label(); + this.textBoxTitle = new System.Windows.Forms.TextBox(); + this.labelTitle = new System.Windows.Forms.Label(); + this.buttonTakeImage = new System.Windows.Forms.Button(); + this.labelTakenImages = new System.Windows.Forms.Label(); + this.saveFileDialog1 = new System.Windows.Forms.SaveFileDialog(); + this.excelHead1 = new UnvisableComponents.ExcelHead(this.components); + this.buttonHead = new System.Windows.Forms.Button(); + this.excelChart1 = new UnvisableComponents.ExcelChart(this.components); + this.buttonPaint = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // buttonOne + // + this.buttonOne.Location = new System.Drawing.Point(584, 40); + this.buttonOne.Name = "buttonOne"; + this.buttonOne.Size = new System.Drawing.Size(94, 29); + this.buttonOne.TabIndex = 0; + this.buttonOne.Text = "Загрузить"; + this.buttonOne.UseVisualStyleBackColor = true; + this.buttonOne.Click += new System.EventHandler(this.buttonOne_Click); + // + // labelPathTitle + // + this.labelPathTitle.AutoSize = true; + this.labelPathTitle.Location = new System.Drawing.Point(12, 40); + this.labelPathTitle.Name = "labelPathTitle"; + this.labelPathTitle.Size = new System.Drawing.Size(41, 20); + this.labelPathTitle.TabIndex = 1; + this.labelPathTitle.Text = "Путь"; + // + // labelImages + // + this.labelImages.AutoSize = true; + this.labelImages.Location = new System.Drawing.Point(12, 75); + this.labelImages.Name = "labelImages"; + this.labelImages.Size = new System.Drawing.Size(75, 20); + this.labelImages.TabIndex = 2; + this.labelImages.Text = "Картинки"; + // + // buttonTakePath + // + this.buttonTakePath.Location = new System.Drawing.Point(12, 8); + this.buttonTakePath.Name = "buttonTakePath"; + this.buttonTakePath.Size = new System.Drawing.Size(121, 29); + this.buttonTakePath.TabIndex = 3; + this.buttonTakePath.Text = "ВыбратьПуть"; + this.buttonTakePath.UseVisualStyleBackColor = true; + this.buttonTakePath.Click += new System.EventHandler(this.buttonTakePath_Click); + // + // openFileDialogPath + // + this.openFileDialogPath.FileName = "openFileDialogPath"; + // + // labelPath + // + this.labelPath.AutoSize = true; + this.labelPath.Location = new System.Drawing.Point(59, 40); + this.labelPath.Name = "labelPath"; + this.labelPath.Size = new System.Drawing.Size(0, 20); + this.labelPath.TabIndex = 4; + // + // textBoxTitle + // + this.textBoxTitle.Location = new System.Drawing.Point(337, 42); + this.textBoxTitle.Name = "textBoxTitle"; + this.textBoxTitle.Size = new System.Drawing.Size(125, 27); + this.textBoxTitle.TabIndex = 5; + this.textBoxTitle.TextChanged += new System.EventHandler(this.textBox1_TextChanged); + // + // labelTitle + // + this.labelTitle.AutoSize = true; + this.labelTitle.Location = new System.Drawing.Point(254, 45); + this.labelTitle.Name = "labelTitle"; + this.labelTitle.Size = new System.Drawing.Size(81, 20); + this.labelTitle.TabIndex = 6; + this.labelTitle.Text = "Заголовок"; + // + // buttonTakeImage + // + this.buttonTakeImage.Location = new System.Drawing.Point(12, 98); + this.buttonTakeImage.Name = "buttonTakeImage"; + this.buttonTakeImage.Size = new System.Drawing.Size(121, 29); + this.buttonTakeImage.TabIndex = 7; + this.buttonTakeImage.Text = "ВыбратьФото"; + this.buttonTakeImage.UseVisualStyleBackColor = true; + this.buttonTakeImage.Click += new System.EventHandler(this.buttonTakeImage_Click); + // + // labelTakenImages + // + this.labelTakenImages.AutoSize = true; + this.labelTakenImages.Location = new System.Drawing.Point(93, 75); + this.labelTakenImages.Name = "labelTakenImages"; + this.labelTakenImages.Size = new System.Drawing.Size(0, 20); + this.labelTakenImages.TabIndex = 8; + // + // buttonHead + // + this.buttonHead.Location = new System.Drawing.Point(12, 189); + this.buttonHead.Name = "buttonHead"; + this.buttonHead.Size = new System.Drawing.Size(94, 29); + this.buttonHead.TabIndex = 9; + this.buttonHead.Text = "Go"; + this.buttonHead.UseVisualStyleBackColor = true; + this.buttonHead.Click += new System.EventHandler(this.buttonHead_Click); + // + // buttonPaint + // + this.buttonPaint.Location = new System.Drawing.Point(12, 280); + this.buttonPaint.Name = "buttonPaint"; + this.buttonPaint.Size = new System.Drawing.Size(94, 29); + this.buttonPaint.TabIndex = 10; + this.buttonPaint.Text = "Paint"; + this.buttonPaint.UseVisualStyleBackColor = true; + this.buttonPaint.Click += new System.EventHandler(this.buttonPaint_Click); + // + // Lab2 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.buttonPaint); + this.Controls.Add(this.buttonHead); + this.Controls.Add(this.labelTakenImages); + this.Controls.Add(this.buttonTakeImage); + this.Controls.Add(this.labelTitle); + this.Controls.Add(this.textBoxTitle); + this.Controls.Add(this.labelPath); + this.Controls.Add(this.buttonTakePath); + this.Controls.Add(this.labelImages); + this.Controls.Add(this.labelPathTitle); + this.Controls.Add(this.buttonOne); + this.Name = "Lab2"; + this.Text = "Lab2"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private UnvisableComponents.ImageExcel imageExcel1; + private Button buttonOne; + private Label labelPathTitle; + private Label labelImages; + private Button buttonTakePath; + private OpenFileDialog openFileDialogPath; + private Label labelPath; + private TextBox textBoxTitle; + private Label labelTitle; + private Button buttonTakeImage; + private Label labelTakenImages; + private SaveFileDialog saveFileDialog1; + private UnvisableComponents.ExcelHead excelHead1; + private Button buttonHead; + private UnvisableComponents.ExcelChart excelChart1; + private Button buttonPaint; + } +} \ No newline at end of file diff --git a/VisEl/TestForm/Lab2.cs b/VisEl/TestForm/Lab2.cs new file mode 100644 index 0000000..184219b --- /dev/null +++ b/VisEl/TestForm/Lab2.cs @@ -0,0 +1,110 @@ +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; +using TestLib; +using UnvisableComponents; +using static System.Windows.Forms.VisualStyles.VisualStyleElement; + +namespace TestForm +{ + public partial class Lab2 : Form + { + + ImageInfo info; + List files; + string[] names = { "Vova M", "Sasha A", "Dima D", "Danila L" }; + string[] sports = { "Run", "Swim", "Cycle", "Race", "Box" }; + string[] cities = { "Moskow", "Samara", "Piter", "Kazan", "Kyrsk" }; + string[] countries = { "Russia", "Spain", "China", "India", "Brazil" }; + string[] rewards = { "#1", "#2", "KMS", "Olymp", "MS" }; + List sportsmens = new List(); + public Lab2() + { + InitializeComponent(); + info = new ImageInfo(); + files = new List(); + } + + private void buttonOne_Click(object sender, EventArgs e) + { + info.Files = files; + imageExcel1.Load(info); + } + + private void buttonTakePath_Click(object sender, EventArgs e) + { + if (saveFileDialog1.ShowDialog() == DialogResult.Cancel) + return; + string filename = saveFileDialog1.FileName; + labelPath.Text = filename; + info.Path = filename; + MessageBox.Show("Файл открыт"); + } + + private void textBox1_TextChanged(object sender, EventArgs e) + { + info.Title = textBoxTitle.Text; + } + + private void buttonTakeImage_Click(object sender, EventArgs e) + { + if (openFileDialogPath.ShowDialog() == DialogResult.Cancel) + return; + string filename = openFileDialogPath.FileName; + files.Add(filename); + labelTakenImages.Text +=" " + openFileDialogPath.FileName; + MessageBox.Show("Файл открыт"); + } + + private void buttonHead_Click(object sender, EventArgs e) + { + string path = @"C:\Users\Вова\Documents\WriteToExcel2.xlsx"; + string title = "title"; + ExcelInfo ei = new ExcelInfo(); + ei.Title = title; + ei.Path = path; + ei.Dates = new List(); + Dictionary aloneFields = new Dictionary(); + ei.addDictionary("Personal", "name", 10); + ei.addDictionaryAlone("awards", 15); + ei.addDictionary("Personal", "city", 20); + ei.addDictionary("Proffesion", "Region", 30); + ei.addDictionary("Proffesion", "sport", 70); + + sportsmens.Clear(); + Random rn = new Random(); + for (int i = 0; i < 10; i++) + { + Sportsmen sm = new Sportsmen(names[rn.Next(0, 4)], sports[rn.Next(0, 5)], cities[rn.Next(0, 5)], countries[rn.Next(0, 5)], rewards[rn.Next(0, 5)]); + sportsmens.Add(sm); + } + ei.Dates = sportsmens; + excelHead1.Load(ei); + } + + private void buttonPaint_Click(object sender, EventArgs e) + { + string path = @"C:\Users\Вова\Documents\WriteToExcel2.xlsx"; + string title = "title"; + ChartInfo ci = new ChartInfo(); + ci.Title = title; + ci.Path = path; + List<(string, int)> dates = new List<(string,int)>(); + ci.DiagrammTitle = "CHARTTOP"; + + Random rn = new Random(); + for (int i = 0; i < 5; i++) + { + dates.Add((names[rn.Next(0, 4)],rn.Next(1,10))); + } + ci.Dates = dates; + excelChart1.Load(ci); + } + } +} diff --git a/VisEl/TestForm/Lab2.resx b/VisEl/TestForm/Lab2.resx new file mode 100644 index 0000000..97ede61 --- /dev/null +++ b/VisEl/TestForm/Lab2.resx @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + 206, 17 + + + 17, 17 + + + 343, 17 + + + 505, 17 + + + 636, 17 + + \ No newline at end of file diff --git a/VisEl/TestForm/Program.cs b/VisEl/TestForm/Program.cs new file mode 100644 index 0000000..85edeba --- /dev/null +++ b/VisEl/TestForm/Program.cs @@ -0,0 +1,17 @@ +namespace TestForm +{ + internal static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + // To customize application configuration such as set high DPI settings or default font, + // see https://aka.ms/applicationconfiguration. + ApplicationConfiguration.Initialize(); + Application.Run(new Form1()); + } + } +} \ No newline at end of file diff --git a/VisEl/Test/TestClasses/Sportsmen.cs b/VisEl/TestForm/TestClasses/Sportsmen.cs similarity index 100% rename from VisEl/Test/TestClasses/Sportsmen.cs rename to VisEl/TestForm/TestClasses/Sportsmen.cs diff --git a/VisEl/TestForm/TestForm.csproj b/VisEl/TestForm/TestForm.csproj new file mode 100644 index 0000000..0d231fd --- /dev/null +++ b/VisEl/TestForm/TestForm.csproj @@ -0,0 +1,25 @@ + + + + WinExe + net6.0-windows + enable + true + enable + + + + + + + + + + Form + + + Form + + + + \ No newline at end of file diff --git a/VisEl/TestLib/Car.cs b/VisEl/TestLib/Car.cs deleted file mode 100644 index a476ba9..0000000 --- a/VisEl/TestLib/Car.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Security.Cryptography.X509Certificates; -using System.Text; -using System.Threading.Tasks; - -namespace TestLib -{ - public class Car - { - string model; - string Model { get { return model; } set { model = value; } } - string year; - string color; - public Car(string model, string year, string color) - { - this.model = model; - this.year = year; - this.color = color; - } - } -} diff --git a/VisEl/TestLib/Employer.cs b/VisEl/TestLib/Employer.cs deleted file mode 100644 index d869b7d..0000000 --- a/VisEl/TestLib/Employer.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace TestLib -{ - public class Employer - { - string name; - string proffesion; - string office; - public Employer(string name, string proffesion, string office) - { - this.name = name; - this.proffesion = proffesion; - this.office = office; - } - } -} diff --git a/VisEl/TestLib/Sportsmen.cs b/VisEl/TestLib/Sportsmen.cs deleted file mode 100644 index a358b76..0000000 --- a/VisEl/TestLib/Sportsmen.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace TestLib -{ - public class Sportsmen - { - string name; - string sport; - string city; - string country; - string Region { get { return city; } set { city = value; } } - int awards; - public Sportsmen(string name, string sport, string city, string country, int awards) - { - this.name = name; - this.sport = sport; - this.city = city; - this.country = country; - this.awards = awards; - } - } -} diff --git a/VisEl/TestLib/TestLib.csproj b/VisEl/TestLib/TestLib.csproj deleted file mode 100644 index 132c02c..0000000 --- a/VisEl/TestLib/TestLib.csproj +++ /dev/null @@ -1,9 +0,0 @@ - - - - net6.0 - enable - enable - - - diff --git a/VisEl/UnvisableComponents.zip b/VisEl/UnvisableComponents.zip new file mode 100644 index 0000000000000000000000000000000000000000..6823950310b86d9eaa4a991c32b74638ab6cec5b GIT binary patch literal 75170 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

emP$=waii6iHuY976% zOobuGJ7#WLhS^7{NQ@)44SofUcSH+xI?=)(>uCVG){!=*zz>8A&Jhn0uY3}XW$VC< zG!N!(eUTkSV&5BiVaD-6idk>_UED}z8od3(Tk5e7 zQQ}a`j=0MSQz2uCZ5vRTECrnL#VmI$2~?lVFB0*Sc>`Y=A=7r${Y*NG@0qWu?T=>z zkp;r_vo+06g*%a$bDelDP={MH6=xAbLnAv<-{R_*R^MZzsnXmkd28V47;#mZ9`zCz4a86Fp zNcnMH)p?)6pY1PUFT3*BFgyc=1)KX*2MEk1Gh%|l1FXkUWKbd*LJ3r`=VX1E&hu%a zVk*7GP=K+a(Ye4W!U@aIG(%j!OLlBRvV{5}Jt1gvX}YqiGhx`MIe>n5G* zoR4n$rUUmaX6>!2uL3PSk2lSQhYJOI6r~N+>Ai#wSRi3xE$$25>#}DjYxoP$1Nh)h zjz6xx&5Dxg{p^uX9i-y(@W)4zZXy$Djze5OeLljZiZ2`7QM!kQWk*Oo_mXd-CNmg! zrv7 z>s;@(E)M!5$(*7sgy3?-bbX=(zINqIX~D44r>n$#N_bH%sXTfpKNmUo3Ved4gZ^S; zm5IZ%K3>U;Qc~ov|aZUM0mVNB>>^MS42qVfu zGm^m(KdJo;`E%!qGRI>g)In)Z>+Fr1;l=1$Zm~o7P_~}4(zZzQ#8D%qedsy0|G0Ba zI?^;8?=%TBVc`eYGlG~f^FZyrJkDOi?z^q|MKt$*F1|p^{K;MJ?`B^1uGqN`$MaxX zfCL*eo&?uI%6ST%I`)T7V~)pVV$MRuLz7=!yuhBdmr$_4W_ePTDFvv9cgSMS8L)^o zIg)Ci+gXU}AF`JALT4`qYAGSc5wA4!lyP%llBA`Y7+GCN&JtTgPyNr9#u`owdU`kwD=EkSwAt*{Gg zN+1Kj1c3%;_nl#WMn}Npl#9%y2!2>3bEVBl&Q65_e3ct10U`@xpInVQ7an7f6+J}p zpmXxZNc|(DXhw^`o?UsBQ|$CRudWEXn|?JXNd+slN=C0)7B*Yzg$+GL+*)>*LEVU6 z22Osye+4~>Vyf#8bBvJ#51+X~+sRe^Wcr+pr}WGt_#;?W`PuJ>rU}0Cz`Q4+x~D(N zMG}Cd)p>b(&vkUxqGX(RRyp>It7Js(kp*)DKUA-ij8vP_dPq_2Jw?T~YA z9xcq|*m1GLzIg)wMV>P}%U#w)m6v;Z&_T591N7~|sm!Wsc%rnaL z=sK15%CsGaakeO9G4cBeLE@Q;CgI0d2`KW@oUe|a#k`rHs9rX~9DKm7hB_+=LFh2Q z;kFV;K7Vj#pAGinpIvm%&~S~_s?!uwt$}aH+t=7C&Dm-aERAT`FCHdaZPtpG^i~s2 z-CVOwZH+}H#)-xeYbnwnwprjC=X z(K>}MyO^{x;^ehpxfpUS4~^Md_k4+)v$+2<%9EFekL64YNohVF1~U_|oNW#lbZHgg z+R#_IdNjg`1jPncD6ZE?Cd{w=Y3-PQW+d_EUDEOibT{9fsg;a~bE*zGIB$JtaY(AX zsUehd#AZ{E+57aXn(d>JG7eoXc#WGIeNtR%m=F*wAo~!+`Vcraal%9WNX`MTQu1PU zM-aaE=5d!T`F^2z7mIm0Ro%Qi**GXl9CeU}t2D8|rBj(0M2RKfXRyb!$I4V6zspX& zbB~C>Iun%t7-g+ZH`13x-iDgKD8mq(pB0`-Ym?;cIE@i_=|(4Qdg#PEYwF2V%GRU# zq!Ka`6Fn&4GZ9U+1jHw3cnU?W!XWwMWNKWkhOH7M2m)PpwOjoj+w9X)oryTq>=W31 z(2b?<>Y`HJjS61q{>cVy3PX?Z;S9CW-Nig-AaH)a!vK2yzGL)62YHa7flQT3i*prkLhw&5|Nc~#i@kLl+o1bO;pC&p<`}P+hxB#$RzPKLzR-VPCX}SM|iYSWp^>06Zw=kfkdIbc5P<- zP}V(iTez4pgWg2kdI<&6i0ixS!%HA&!bg&%Vuq?&+&GnG`91bILKqd(SDA&A*Yq9L z_i4K?BS?BWhKvlB&)tDNS~@D=L9m@_1hdE>nyY!lrlrfLF#8RrGPEMF4|wweP?6+} z6E?R)kOoTHcv5vR+??-97IQT;a-)2pbM)VVA(eTYeJ*LzI+;FK27KudlEwB0- z$I-!M{u-9GmTko9IaObz4{Nb2XNc)Bs>bX>^;y4>ai_qQsT8^pbX|Z%qrleIh)K2y zaLyA~Q)M5gl&ULGLYUB`$3(bNER>I zTV?<7Z{&toV|aUH>!t{2;QC=5sf#IRxsiEU3xUv=R)`Br;X{XunePzHI53nEpvShv z7&m^)cw|y-=EI%{am_SW0((uwYMp|aI6@G2YtY73P(e$+7f9V#3rp>%kYT~sGK7Iz z)f*<2i2)wOxrZ~9mnHPr_MY0dx@lvlK&PTZhRSd8QCw|5WHiC5ejwB=e&-vO7!qg6 zA#y9P948+tiCf*bt?Y8t5lb_7)9eQ=k{|DhaMUx*zkAfv zObA~bGU*n}m`k6mXwrCjN*hwLXP2IeFwm6U^hEAu05wTdOSCo#?F!OsM#iPc3JEv4 zb0zdCJChr0ZVL*L*OYr47}03?m$@h=GO8D}w4X;jH&`|C&B~;YzG9gz)@urGZPSlm zh(x2frwhhM(}}hU+Te}hj9A$g!X_=lHrh2Zz>k5fm7hw*72|@*Jt-d0nH66Me+v|M zWMSZRDwzC4CO%W==XLEb51qEM#0K-NX%coTTFDyy?u3_;(?g(0 z=xoCA&)bVhYU|#m{b+1GiC#N6A9=G4fRe?4ZC&{8D#YXuo;Z$Q)O8}+!eO~Izeb~{0;N z8|o(ve|8EtBK~o!wokdm%{u%)dUu1s#*KBv5w7w+E_tc1 zBU4l=$xx&1xa;Mj$PJ!ZD^5TkYl0CN0?UVd({y5o0evlUG7sV6~NejLTb!fzez^ti-cZt2lvQQESgQ0S>KY+3W zI*JjqNjfOHJ6=a2p436Dgh9GHBju1dAq?Tc;38Rnm_r((eZY>i=DkGj;~=m@Fl_AU z1aVL5l;9egT-G-WBkkS7jJs zvaeQbcLi$;`28YcMXH>Lr}|v%C$aIYx_;zqP?xRvFpwE$K%Ymdg>F zvvQZ*&U;zJuHkc4jLPGqUMc1&8pM;hVE_0$K3mhV(nk#@#<&lQR0Q^YSOcF-SjS*2 zQ$`RL3=(o?UB{8;MbT{JL}~~P573smau!Rr{*vAN%orBXV(zC=t=Xpm0!tj2)0rA z{Rhs0sE##Nlz4f8oWDl25~uRPI2{+CQ;#Yvm2$ai+peiv_JzQ%y*|x1EYG{yP`v8T zIcVa}xd8~#`oXkbjhk>Shn>uup09FzU)OWqp7!5pQ__7kd>B%K6J2Ce8Y@3JV@c20 z0$1BMuTCxdW?e3J(52j^1g(+R79x!-%d1eP>(blCsndH(;tizwJ-%LKky?^U_u;X& z)M9t=@)+q=wD~_ z5b>7F>(EBD&{4vI|HM5N|9bZ2)d^!9ST@-Tu}?yReJc)~fX!RYkmRa~$)tSAxAst! zp())kff5l+Ck}iUc4bqQJ3@yfTIj*+#b&W3&Xz+BRDp*6>Rmi*7bDH-bpicI3V-*| zmFEo~TEaZMU?sPS`9;;oXDSsDff6LYotWSmR3P;0`{XT7#( zE3IMkksD5Kmuxffd1VKc^Khenh(;Ow7sPFObziyJWUR+g=3}yv{^{?QNAZE&l4ZwJ*HLWCkq*ucS=+R{(eYbm zhJzmjA=m5*C(IiO^s+dPxm*j4uv0VfvY+Q!kd7a(6!)qoy19mTt&t0(LT7xMW{L|A zjT8$!G*fXhKBy+V763NLzd`=_h35(2BW7(At^8QP2h5mo|98`YHqNHTPQNqBwpVQpnAvIXx6Ijqt-+)wAyI3kyW0q%?4RKI(u~hLaLr<79R8gee0(nBf7^Mxg52NPzg5YTm*zJoceC%1_fC;@6A%O8A@(ra4<99vxZ5gNc=4K) zFH)JiY*pAm(gK(ZNSAc$B*NWmd(u7@Oq z>x5EKyL-=qfh%PW;GsJeI9JZ;)!h8yE;xV!szw~F;0oakpIRbHOMKXc4+p|`Wj39X6kfMB>Qv=EZ6#$s3D+75RNwxmLmnjV&HXz0g~@7jjxQFQK1#)ee z&5qmPg*6a~#N!HNrtT08SKJMDN5V2IfN~!9z-tU~w-q{Ce)1yF3UOw-vNjX*XzOu# zl!}pk9N(+7-;&#Jga3jn%UVFH6>>>$nh>bI3MI&dIZ`%sobNaCJb{sZxGS*T84#dxb={qi#K!;fYoEvUkmn-EE+Og}{!| z|3NEQIQA07X)4uP#~aJn1BE2^1sQx z{d-$CGIg{wHl+VK0Y0iSYO}wMN6mi0IBaZ78*s7**G|#$GZ+vX*Zj`;I#%Bc(!s{7!0xh0;OI71tp(SCV z&D+fnm{Nwo=u1u5+|pYz2AAc?-KGPNC7`8BwH^G(6z zW1dA|1j=C+fdsDYB}Kz+R1q!ME|m{|!t}x49{;FP1+P`115|;A4=s(H0UgcOayFBh zuB}dI9h$0EL;98T30ELRcI)OXLDV>5HaKO_$(DcfJb6ra}tS#NXk?Y zhDo@v=YXJ)6ylC-M|!mV6@~QZPSHPQBLM77uxqhcfRR5W8tOw~$SeEt?1}JoA*Li( z6&Ed#ahnf^%?Yu>o@8ENC7lt*WarWGfT4fvYpCQ8s6$cH-1k<-l>uveo7!F8Y>}Y- zl4+alPL{!&RI`b(QUVl_i0{i!#?8r?uGD#x#OhgB6QzbFrX_0}xYDH0gQQsT<@;Y? z2{GCU7!igSG)Yn8;jxOl-X$&g;`REc#cs=-avTJIT+U!R3tOCnDU?aY@lSg}gjwg~ zQ7z&!r0M%uPdO}pET5%R#$t4sXCH{GQVgkV1c5l#CJCX#l`*~EI+6c?MvxceT!uZj*5|sBl^+9`)lF_4~=|P07@5Qk_S(G&;i2y7*vuDn2 z3Z91h6%CvvyW7}~WsDsuyPWw8_<^5-w!RWkXxZF(2pFlU7~wZpO>3Im#40!W2C^=TY_bJ8p?$Zq0V)DAtJB zFjTmY{Tn8RN|e0SGD_Ud%wc_{#y!>M1|jPlU80pFD~q9ygfC&4gUpcm*8*S3mIJgI zwFpKC^>nU#ZL_mPc;V=~<@ZbcqFOc3tvzhBBc_Dor0`-7%MFafP#1xF7vd^wsYoZ@ z``=W0V83IMXUTuAN#!jhNaC*C>-bB$fM~$l(yoJj*)AmWW0Xl*@N@dAydetN4KsXyVwLY2*4(iQ7p`7PKaLd>QD7LPLpi86izcs%56D z*Y&Y61XoJFHCK*&_~WYs7tb|qIum3Aa$A#o9 z$SM`wz>v$z+}rFGx5i10Q~&fTt_Q^ftDetcizTdb$=Ij?D~;4Nj?FySzE%>g(0)Go5uQc) z+Own>`*8I2_!OG!rs2IGIHjla1efy+4?zRlXa$eibeOAF^s|ufQZ9G+z~j z`0u`4ZBS7tH-e)^Nw^*{9qIk|B%ge}r?W&lU00jeH9QH6JN~j-`Lji>bW1~q09sNq z;1vA-Yf(=64uGMHBhN?+d^aN!&;))MUiop@XfZ#ftctkbL4Y@r=&kmSBe6??9;pft zHiX;xi`VQaiAbGZa;K5LCYHQ-w0CYsP!n7R2_+TJ121zPxPe*5P3al)`s6!jlW2#B zryhp;WK#4##m@q&_-9le*DNgOX22f41cDO8d!^Lq=cGY98faR$MTqTPR|5z*^yva z=8Oi#?9ilsshY{dv43~D%eTHs`r!3OscGuc38HcNg2o5E7s1hsUz__)=uYA z&v1jGN#>=p9aB*-O9+l}ksfh*+e8*0H{?BwFjMB1a0bxPyqaSHFdcuIYN~<7DT?3$ znbCe!U&%oAaPx7#hV>`M4cH&#To5Ib(xR_&mQst^F5f=UaZIGlHCr2BWAX%Cbstb= z$8tNoVcZ2MsEG4h4x5Yji5AJ;;DAb`_H!mV3^%Id(J6WJt|lWGUj$Tt87M8QkYkwi zZK-_%`RBo}rtHz|0>IrK0N20&U%Q>&+0odcD3)6mKs6EUNqVLyGd>1^9oU*-@D3Oc z#m~o3PK{*Q@Bx|3v|vMA3z))+lp1^JVSk!ErZPsZX@#4{1ua2;y(`~bAXc?J%J(>T z=X92i_GuXQ0qr463Ek2pLudS1-hebmKq*2FPnt7?ySI?s!O$X8Ar95nv0x$ZGoCsE z+GLRolghU9@)~~~to`-8EbodKy}*Xted=JA|3~!zKW)b3Ua1Mg&j>1>A}*QkRQ!G* z0WO7r^B1k1!NA;x;oqU)|A7Gn^b=+2-=GK^8#tT(6V?S_$oP-H0}6EixcP~N4rn0% zN~7PgY>b`Q=o#r;&25ZqT^;`d4F&WQnr6E`X$3G6{mupiB>4yQ@9xw8-$MUF4|*eG zJICKfsDHZW*AyVXizWnIiU2QszkvG9$-gw|7eA&45Q6+&;@?vS{V5TQ{68QOkU;3K z5wK)J@bOem{e_HnQ_}#bjQooicWTx-nBw=G>3rM>3S2RE}9o40*os?Vv z0wMqrpzv?U?`SeIzeW=_cK~dZF}JmmHa0c3G5Q;3rxK5<3)%VN{W1@wy( z)R{(3z!L@tP#5C=fF}f$j{jfaf6-R|IobmO{k`H?{vq|JQQ?mNd!x*4oc_tKpDF16 zY8N1!|8Wokt}FkK68=Zipn!g+cLe$o^63T;X!ro}Oa8y){?_|^eEyfF{Yv70wV7Y^ z(VxDC{=?G$%I@}OCx-(1xm(nQVm&Gw5(p><@KyqN{QY+P zu7$$H zG&V7IFt#x?{(WxyPi269qf+}r`fnGVf7}oPN^+I|Ic5G8-QRx=#eYrs_fwtU>ty&p zsLQ{g|NGN1P(Z(;_4`v9hj0Hm$NY-q@2{HtitX;FCci%|cdPybn*433`?H1qJpt@b zdB0bL@bG^?;{SCz*uQ$>SD8xx)a(7|e?qUn=PmuK{9k1a{VD(VnxGi_56J)9E5NTd zwf~g&drdrE{cDN8*y8?IQ+~BP_9rkj6!0$xbU%km{{{S)#j?Kx|9yGlPv9+>e+~Sr z2gx6S?7uBm{8i$wCTIVYsDkkSA@Pr?+P_Qt`^4R!(n^s2zoh*!jrUi1znVe&Q(g@6 yujTz~U;Y*QXCwIgG|`{f5UBrK?B6Dh dates = new List<(string, int)>(); + private DirectionLegend dir = 0; + public string Path { get { return path; } set { path = value; } } + public string Title { get { return title; } set { title = value; } } + public string DiagrammTitle { get { return diagrammTitle; } set { diagrammTitle = value; } } + public DirectionLegend DirLegend { get { return dir; } set { dir = value; } } + public List<(string, int)> Dates { get { return dates; } set { dates = value; } } + public ChartInfo() { } + } +} diff --git a/VisEl/UnvisualComponents/ImageExcel.cs b/VisEl/UnvisableComponents/DirectionLegend.cs similarity index 53% rename from VisEl/UnvisualComponents/ImageExcel.cs rename to VisEl/UnvisableComponents/DirectionLegend.cs index 563890c..4de7cc0 100644 --- a/VisEl/UnvisualComponents/ImageExcel.cs +++ b/VisEl/UnvisableComponents/DirectionLegend.cs @@ -4,9 +4,13 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace UnvisualComponents +namespace UnvisableComponents { - public class ImageExcel + public enum DirectionLegend { + Up, + Left, + Right, + Bottom, } } diff --git a/VisEl/UnvisableComponents/ExcelChart.Designer.cs b/VisEl/UnvisableComponents/ExcelChart.Designer.cs new file mode 100644 index 0000000..ac95eda --- /dev/null +++ b/VisEl/UnvisableComponents/ExcelChart.Designer.cs @@ -0,0 +1,36 @@ +namespace UnvisableComponents +{ + partial class ExcelChart + { + ///

+ /// Обязательная переменная конструктора. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Освободить все используемые ресурсы. + /// + /// истинно, если управляемый ресурс должен быть удален; иначе ложно. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Код, автоматически созданный конструктором компонентов + + /// + /// Требуемый метод для поддержки конструктора — не изменяйте + /// содержимое этого метода с помощью редактора кода. + /// + private void InitializeComponent() + { + components = new System.ComponentModel.Container(); + } + + #endregion + } +} diff --git a/VisEl/UnvisableComponents/ExcelChart.cs b/VisEl/UnvisableComponents/ExcelChart.cs new file mode 100644 index 0000000..b4a2a55 --- /dev/null +++ b/VisEl/UnvisableComponents/ExcelChart.cs @@ -0,0 +1,76 @@ +using OfficeOpenXml.Style; +using OfficeOpenXml; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using LicenseContext = OfficeOpenXml.LicenseContext; +using OfficeOpenXml.Drawing.Chart; + +namespace UnvisableComponents +{ + public partial class ExcelChart : Component + { + public ExcelChart() + { + InitializeComponent(); + } + + public ExcelChart(IContainer container) + { + container.Add(this); + + InitializeComponent(); + } + public void Load(ChartInfo info) + { + ExcelPackage.LicenseContext = LicenseContext.NonCommercial; + Check(info); + List fields = new List(); + using (ExcelPackage excelPackage = new ExcelPackage()) + { + excelPackage.Workbook.Properties.Author = "Qawithexperts"; + excelPackage.Workbook.Properties.Title = "test Excel"; + excelPackage.Workbook.Properties.Subject = "Write in Excel"; + excelPackage.Workbook.Properties.Created = DateTime.Now; + + ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets.Add("Sheet 1"); + worksheet.Cells["A1"].Value = info.Title; + int posString = 2; + int endColumn = 1; + int startColumn = 1; + foreach(var step in info.Dates) + { + worksheet.Cells[posString,endColumn].Value = step.Item1; + worksheet.Cells[posString+1, endColumn].Value = step.Item2; + endColumn++; + } + ExcelPieChart pieChart = worksheet.Drawings.AddChart("pieChart", eChartType.Pie3D) as ExcelPieChart; + pieChart.Title.Text = info.DiagrammTitle; + pieChart.Series.Add(ExcelRange.GetAddress(posString+1, startColumn, posString + 1, endColumn-1), ExcelRange.GetAddress(posString, startColumn, posString, endColumn-1)); + + pieChart.Legend.Position = (eLegendPosition)(int)info.DirLegend; + pieChart.DataLabel.ShowPercent = true; + pieChart.SetPosition(1, 0, 0, 0); + FileInfo fi = new FileInfo(info.Path); + excelPackage.SaveAs(fi); + } + } + public void Check(ChartInfo info) + { + if (string.IsNullOrEmpty(info.Title)) + throw new Exception("Забыли заглавие"); + if (string.IsNullOrEmpty(info.Path)) + throw new Exception("Забыли путь"); + if (!info.Path.EndsWith(".xlsx")) + info.Path += ".xlsx"; + if (info.Dates.Count == 0) + throw new Exception("забыли данные"); + + + } + } +} diff --git a/VisEl/UnvisableComponents/ExcelHead.Designer.cs b/VisEl/UnvisableComponents/ExcelHead.Designer.cs new file mode 100644 index 0000000..45a5117 --- /dev/null +++ b/VisEl/UnvisableComponents/ExcelHead.Designer.cs @@ -0,0 +1,36 @@ +namespace UnvisableComponents +{ + partial class ExcelHead + { + /// + /// Обязательная переменная конструктора. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Освободить все используемые ресурсы. + /// + /// истинно, если управляемый ресурс должен быть удален; иначе ложно. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Код, автоматически созданный конструктором компонентов + + /// + /// Требуемый метод для поддержки конструктора — не изменяйте + /// содержимое этого метода с помощью редактора кода. + /// + private void InitializeComponent() + { + components = new System.ComponentModel.Container(); + } + + #endregion + } +} diff --git a/VisEl/UnvisableComponents/ExcelHead.cs b/VisEl/UnvisableComponents/ExcelHead.cs new file mode 100644 index 0000000..583b007 --- /dev/null +++ b/VisEl/UnvisableComponents/ExcelHead.cs @@ -0,0 +1,145 @@ +using OfficeOpenXml.Drawing; +using OfficeOpenXml; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using LicenseContext = OfficeOpenXml.LicenseContext; +using System.Reflection; +using System.Xml.Linq; +using OfficeOpenXml.Style; +using System.Data.Common; + +namespace UnvisableComponents +{ + public partial class ExcelHead : Component + + { + public ExcelHead() + { + InitializeComponent(); + } + + public ExcelHead(IContainer container) + { + container.Add(this); + + InitializeComponent(); + } + public void Load(ExcelInfo info) where T:class + { + ExcelPackage.LicenseContext = LicenseContext.NonCommercial; + Check(info); + List fields = new List(); + using (ExcelPackage excelPackage = new ExcelPackage()) + { + excelPackage.Workbook.Properties.Author = "Qawithexperts"; + excelPackage.Workbook.Properties.Title = "test Excel"; + excelPackage.Workbook.Properties.Subject = "Write in Excel"; + excelPackage.Workbook.Properties.Created = DateTime.Now; + + ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets.Add("Sheet 1"); + worksheet.Cells["A1"].Value = info.Title; + int posString = 2; + int posColumn = 1; + foreach(var step in info.Filds) + { + if(step.Value.Item1.Count == 1) + { + worksheet.Cells[posString, posColumn, posString, posColumn+1].Merge = true; + worksheet.Cells[posString, posColumn].Value = step.Key; + worksheet.Cells[posString, posColumn].Style.Fill.PatternType = ExcelFillStyle.Solid; + worksheet.Cells[posString, posColumn].Style.Fill.BackgroundColor.SetColor(Color.LightGreen); + fields.Add(step.Key); + posString++; + continue; + } + worksheet.Cells[posString, posColumn, posString + step.Value.Item1.Count-1, posColumn].Merge = true; + worksheet.Cells[posString, posColumn].Value = step.Key; + worksheet.Cells[posString, posColumn].Style.TextRotation = 180; + worksheet.Cells[posString, posColumn].Style.Fill.PatternType = ExcelFillStyle.Solid; + worksheet.Cells[posString, posColumn].Style.Fill.BackgroundColor.SetColor(Color.AliceBlue); + worksheet.Column(posColumn).BestFit = true; + posColumn++; + foreach(var field in step.Value.Item1) + { + int id = step.Value.Item1.IndexOf(field); + worksheet.Cells[posString, posColumn].Value = field; + worksheet.Cells[posString, posColumn].Style.Fill.PatternType = ExcelFillStyle.Solid; + worksheet.Cells[posString, posColumn].Style.Fill.BackgroundColor.SetColor(Color.AliceBlue); + worksheet.Row(posString).Height = step.Value.Item2[id]; + fields.Add(field); + posString++; + } + posColumn--; + } + posColumn = 3; + foreach (var step in info.Dates) + { + posString = 2; + + var type = step.GetType(); + foreach(var field in fields) + { + worksheet.Cells[posString, posColumn].Value = + type.GetField(field) == null ? type.GetProperty(field).GetValue(step) : type.GetField(field).GetValue(step); + posString++; + } + posColumn++; + } + CheckTable(worksheet, fields.Count, info.Dates.Count); + FileInfo fi = new FileInfo(info.Path); + excelPackage.SaveAs(fi); + } + } + public void Check(ExcelInfo info) where T : class + { + if (string.IsNullOrEmpty(info.Title)) + throw new Exception("Забыли заглавие"); + if (string.IsNullOrEmpty(info.Path)) + throw new Exception("Забыли путь"); + if (!info.Path.EndsWith(".xlsx")) + info.Path += ".xlsx"; + if (info.Dates.Count == 0) + throw new Exception("забыли данные"); + + + } + public void CheckTable(ExcelWorksheet worksheet, int rows, int columns) + { + int posString = 2; + int posColumn = 1; + rows += posString; + columns += posColumn; + while(posString < rows) + { + while (posColumn < columns) + { + if (worksheet.Cells[posString, posColumn].Value == null && !worksheet.Cells[posString, posColumn - 1 ,posString, posColumn].Merge) + throw new Exception("Пустая ячейка"); + posColumn++; + } + posString++; + } + posString = 2; + posColumn = 3 + columns; + while(posString < rows ) + { + if (worksheet.Cells[posString, posColumn].Value != null) + throw new Exception("Выход за границы"); + posString++; + } + posString = 2 + rows; + posColumn = 1; + while (posColumn < columns) + { + if (worksheet.Cells[posString, posColumn].Value != null) + throw new Exception("Выход за границы"); + posColumn++; + } + } + } +} diff --git a/VisEl/UnvisableComponents/ExcelInfo.cs b/VisEl/UnvisableComponents/ExcelInfo.cs new file mode 100644 index 0000000..2d7f5db --- /dev/null +++ b/VisEl/UnvisableComponents/ExcelInfo.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Xml.Linq; + +namespace UnvisableComponents +{ + public class ExcelInfo where T: class + { + private string path; + private string title; + private List dates; + private Dictionary, List)> fields = new Dictionary, List)>(); + public string Path { get { return path; } set { path = value; } } + public string Title { get { return title; } set { title = value; } } + public List Dates { get { return dates; } set { dates = value; } } + public Dictionary, List)> Filds { get { return fields; } } + public void addDictionary(string name, string field, int height) + { + if (fields.ContainsKey(name)) + { + fields[name].Item1.Add(field); + fields[name].Item2.Add(height); + } + else + { + fields.Add(name, (new List(), new List())); + fields[name].Item1.Add(field); + fields[name].Item2.Add(height); + } + } + public void addDictionaryAlone(string field, int height) + { + + fields.Add(field, (new List(), new List())); + fields[field].Item1.Add(field); + fields[field].Item2.Add(height); + + } + public ExcelInfo() { } + } +} diff --git a/VisEl/UnvisableComponents/ImageExcel.Designer.cs b/VisEl/UnvisableComponents/ImageExcel.Designer.cs new file mode 100644 index 0000000..d77ba9c --- /dev/null +++ b/VisEl/UnvisableComponents/ImageExcel.Designer.cs @@ -0,0 +1,36 @@ +namespace UnvisableComponents +{ + partial class ImageExcel + { + /// + /// Обязательная переменная конструктора. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Освободить все используемые ресурсы. + /// + /// истинно, если управляемый ресурс должен быть удален; иначе ложно. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Код, автоматически созданный конструктором компонентов + + /// + /// Требуемый метод для поддержки конструктора — не изменяйте + /// содержимое этого метода с помощью редактора кода. + /// + private void InitializeComponent() + { + components = new System.ComponentModel.Container(); + } + + #endregion + } +} diff --git a/VisEl/UnvisableComponents/ImageExcel.cs b/VisEl/UnvisableComponents/ImageExcel.cs new file mode 100644 index 0000000..b18cef6 --- /dev/null +++ b/VisEl/UnvisableComponents/ImageExcel.cs @@ -0,0 +1,76 @@ +using OfficeOpenXml; +using OfficeOpenXml.Drawing; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Drawing.Design; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using LicenseContext = OfficeOpenXml.LicenseContext; + +namespace UnvisableComponents +{ + public partial class ImageExcel : Component + { + public ImageExcel() + { + InitializeComponent(); + + } + + public ImageExcel(IContainer container) + { + container.Add(this); + + InitializeComponent(); + + } + public void Load(ImageInfo info) + { + ExcelPackage.LicenseContext = LicenseContext.NonCommercial; + Check(info); + using (ExcelPackage excelPackage = new ExcelPackage()) + { + excelPackage.Workbook.Properties.Author = "Qawithexperts"; + excelPackage.Workbook.Properties.Title = "test Excel"; + excelPackage.Workbook.Properties.Subject = "Write in Excel"; + excelPackage.Workbook.Properties.Created = DateTime.Now; + + ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets.Add("Sheet 1"); + worksheet.Cells["A1"].Value = info.Title ; + int posString = 1; + int posColumn = 0; + int i = 1; + foreach(var image in info.Files) + { + ExcelPicture excelImage = null; + + excelImage = worksheet.Drawings.AddPicture("image" + i, image); + excelImage.SetPosition(posString, 0, posColumn, 0); + excelImage.SetSize(100, 100); + i++; + posString += 10; + } + + FileInfo fi = new FileInfo(info.Path); + excelPackage.SaveAs(fi); + } + } + public void Check(ImageInfo info) + { + if (string.IsNullOrEmpty(info.Title)) + throw new Exception("Забыли заглавие"); + if(string.IsNullOrEmpty(info.Path)) + throw new Exception("Забыли путь"); + if (!info.Path.EndsWith(".xlsx")) + info.Path += ".xlsx"; + if (info.Files.Count == 0) + throw new Exception("забыли фото"); + + + } + } +} diff --git a/VisEl/UnvisableComponents/ImageInfo.cs b/VisEl/UnvisableComponents/ImageInfo.cs new file mode 100644 index 0000000..ab9c28e --- /dev/null +++ b/VisEl/UnvisableComponents/ImageInfo.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace UnvisableComponents +{ + public class ImageInfo + { + private string path; + private string title; + private List files; + public string Path { get { return path; } set { path = value; } } + public string Title { get { return title; } set { title = value; } } + public List Files { get { return files; } set { files = value; } } + public ImageInfo() { } + } +} diff --git a/VisEl/UnvisableComponents/UnvisableComponents.csproj b/VisEl/UnvisableComponents/UnvisableComponents.csproj new file mode 100644 index 0000000..c1bcc13 --- /dev/null +++ b/VisEl/UnvisableComponents/UnvisableComponents.csproj @@ -0,0 +1,28 @@ + + + + net6.0-windows + enable + true + enable + + + + + + + + + + + + + + + + + Component + + + + diff --git a/VisEl/UnvisableComponents/appSettings.json b/VisEl/UnvisableComponents/appSettings.json new file mode 100644 index 0000000..da7c7c9 --- /dev/null +++ b/VisEl/UnvisableComponents/appSettings.json @@ -0,0 +1,9 @@ +{ + { + "EPPlus": { + "ExcelPackage": { + "LicenseContext": "NonCommercial" //The license context used + } + } + } +} \ No newline at end of file diff --git a/VisEl/UnvisualComponents/UnvisualComponents.csproj b/VisEl/UnvisualComponents/UnvisualComponents.csproj deleted file mode 100644 index 132c02c..0000000 --- a/VisEl/UnvisualComponents/UnvisualComponents.csproj +++ /dev/null @@ -1,9 +0,0 @@ - - - - net6.0 - enable - enable - - - diff --git a/VisEl/VisableComponents/MyCheckList.Designer.cs b/VisEl/VisableComponents/MyCheckList.Designer.cs new file mode 100644 index 0000000..feedcd0 --- /dev/null +++ b/VisEl/VisableComponents/MyCheckList.Designer.cs @@ -0,0 +1,65 @@ +using System.Drawing; + +namespace VisableComponents +{ + partial class MyCheckList + { + /// + /// Обязательная переменная конструктора. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Освободить все используемые ресурсы. + /// + /// истинно, если управляемый ресурс должен быть удален; иначе ложно. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Код, автоматически созданный конструктором компонентов + + /// + /// Требуемый метод для поддержки конструктора — не изменяйте + /// содержимое этого метода с помощью редактора кода. + /// + private void InitializeComponent() + { + this.checkedList = new System.Windows.Forms.CheckedListBox(); + this.SuspendLayout(); + // + // checkedList + // + this.checkedList.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(123)))), ((int)(((byte)(200)))), ((int)(((byte)(246))))); + this.checkedList.FormattingEnabled = true; + this.checkedList.HorizontalScrollbar = true; + this.checkedList.Location = new System.Drawing.Point(3, 3); + this.checkedList.Name = "checkedList"; + this.checkedList.Size = new System.Drawing.Size(279, 242); + this.checkedList.TabIndex = 0; + this.checkedList.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.checkedList_ItemCheck); + // + // MyCheckList + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSize = true; + this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.BackColor = Color.FromArgb(0,0,0); + this.Controls.Add(this.checkedList); + this.Name = "MyCheckList"; + this.Size = new System.Drawing.Size(285, 248); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.CheckedListBox checkedList; + } +} diff --git a/VisEl/VisableComponents/MyCheckList.cs b/VisEl/VisableComponents/MyCheckList.cs new file mode 100644 index 0000000..8c071e6 --- /dev/null +++ b/VisEl/VisableComponents/MyCheckList.cs @@ -0,0 +1,61 @@ +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 VisableComponents +{ + public partial class MyCheckList : UserControl + { + private EventHandler onValueChanged; + public event EventHandler ValueChanged + { + add + { + onValueChanged += value; + } + remove + { + onValueChanged -= value; + } + } + public MyCheckList() + { + InitializeComponent(); + } + public void LoadValues(List Values) + { + checkedList.Items.AddRange(Values.ToArray()); + } + public void RemoveAll() + { + checkedList.Items.Clear(); + } + public string selectedValue { + get + { + if(checkedList.SelectedItem is null) + return ""; + else + return checkedList.SelectedItem.ToString(); + } + set { + if (checkedList.SelectedItem is null) + return; + checkedList.Items[checkedList.SelectedIndex] = value; + } + } + + private void checkedList_ItemCheck(object sender, ItemCheckEventArgs e) + { + Random rn = new Random(); + checkedList.BackColor = Color.FromArgb(rn.Next(0,255), rn.Next(0, 255), rn.Next(0, 255)); + onValueChanged?.Invoke(this,e); + } + } +} diff --git a/VisEl/Test/Form1.resx b/VisEl/VisableComponents/MyCheckList.resx similarity index 96% rename from VisEl/Test/Form1.resx rename to VisEl/VisableComponents/MyCheckList.resx index d5494e3..1af7de1 100644 --- a/VisEl/Test/Form1.resx +++ b/VisEl/VisableComponents/MyCheckList.resx @@ -117,7 +117,4 @@ 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/VisEl/VisableComponents/MyTextBoxDate.Designer.cs b/VisEl/VisableComponents/MyTextBoxDate.Designer.cs new file mode 100644 index 0000000..cfa788d --- /dev/null +++ b/VisEl/VisableComponents/MyTextBoxDate.Designer.cs @@ -0,0 +1,96 @@ +namespace VisableComponents +{ + partial class MyTextBoxDate + { + /// + /// Обязательная переменная конструктора. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Освободить все используемые ресурсы. + /// + /// истинно, если управляемый ресурс должен быть удален; иначе ложно. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Код, автоматически созданный конструктором компонентов + + /// + /// Требуемый метод для поддержки конструктора — не изменяйте + /// содержимое этого метода с помощью редактора кода. + /// + private void InitializeComponent() + { + this.dateTimePicker = new System.Windows.Forms.DateTimePicker(); + this.labelMin = new System.Windows.Forms.Label(); + this.labelMax = new System.Windows.Forms.Label(); + this.panel = new System.Windows.Forms.Panel(); + this.panel.SuspendLayout(); + this.SuspendLayout(); + // + // dateTimePicker + // + this.dateTimePicker.Location = new System.Drawing.Point(12, 22); + this.dateTimePicker.MaxDate = new System.DateTime(9998, 12, 3, 0, 0, 0, 0); + this.dateTimePicker.MinDate = new System.DateTime(1753, 1, 2, 0, 0, 0, 0); + this.dateTimePicker.Name = "dateTimePicker"; + this.dateTimePicker.Size = new System.Drawing.Size(200, 22); + this.dateTimePicker.TabIndex = 0; + this.dateTimePicker.ValueChanged += new System.EventHandler(this.dateTimePicker_ValueChanged); + // + // labelMin + // + this.labelMin.AutoSize = true; + this.labelMin.Location = new System.Drawing.Point(27, 0); + this.labelMin.Name = "labelMin"; + this.labelMin.Size = new System.Drawing.Size(28, 16); + this.labelMin.TabIndex = 2; + this.labelMin.Text = "Min"; + // + // labelMax + // + this.labelMax.AutoSize = true; + this.labelMax.Location = new System.Drawing.Point(186, 0); + this.labelMax.Name = "labelMax"; + this.labelMax.Size = new System.Drawing.Size(32, 16); + this.labelMax.TabIndex = 3; + this.labelMax.Text = "Max"; + // + // panel + // + this.panel.Controls.Add(this.dateTimePicker); + this.panel.Location = new System.Drawing.Point(30, 19); + this.panel.Name = "panel"; + this.panel.Size = new System.Drawing.Size(226, 72); + this.panel.TabIndex = 4; + // + // MyTextBoxDate + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.panel); + this.Controls.Add(this.labelMax); + this.Controls.Add(this.labelMin); + this.Name = "MyTextBoxDate"; + this.Size = new System.Drawing.Size(316, 150); + this.panel.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.DateTimePicker dateTimePicker; + private System.Windows.Forms.Label labelMin; + private System.Windows.Forms.Label labelMax; + private System.Windows.Forms.Panel panel; + } +} diff --git a/VisEl/VisableComponents/MyTextBoxDate.cs b/VisEl/VisableComponents/MyTextBoxDate.cs new file mode 100644 index 0000000..52ded76 --- /dev/null +++ b/VisEl/VisableComponents/MyTextBoxDate.cs @@ -0,0 +1,84 @@ +using System; +using System.Collections.Generic; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace VisableComponents +{ + public partial class MyTextBoxDate : UserControl + { + private EventHandler onValueChanged; + public event EventHandler ValueChanged + { + add + { + onValueChanged += value; + } + remove + { + onValueChanged -= value; + } + } + public string TextEr; + public string Err { get { return TextEr; } private set { TextEr = value; } } + public DateTime? DateMin = null; + public DateTime? DateMax = null; + public MyTextBoxDate() + { + InitializeComponent(); + } + public DateTime? DateMaximum { + get { return DateMax ; } + set { + + DateMax = value; + + } + } + public DateTime? DateMinimum + { + get { return DateMin; } + set + { + + DateMin = value; + + + } + } + public DateTime? Value + { + get + { + if(DateMin is null || DateMax is null) { + Err = "Ошибка: НЕТ диапазона"; + return null; + } + if (dateTimePicker.Value > DateMax || dateTimePicker.Value < DateMin) + { + Err = "Ошибка: Выход за допустимые пределы!!!"; + return null; + } + return dateTimePicker.Value; + } + set + { + if (value == null) return; + if (value > DateMax || value < DateMin) return; + dateTimePicker.Value = (DateTime)value; + } + } + + private void dateTimePicker_ValueChanged(object sender, EventArgs e) + { + if (dateTimePicker.Value >= DateMinimum && dateTimePicker.Value <= DateMaximum) panel.BackColor = Color.LightBlue; + else panel.BackColor = Color.Red; + onValueChanged?.Invoke(this,e); + } + } +} diff --git a/VisEl/Test/Properties/Resources.resx b/VisEl/VisableComponents/MyTextBoxDate.resx similarity index 90% rename from VisEl/Test/Properties/Resources.resx rename to VisEl/VisableComponents/MyTextBoxDate.resx index af7dbeb..1af7de1 100644 --- a/VisEl/Test/Properties/Resources.resx +++ b/VisEl/VisableComponents/MyTextBoxDate.resx @@ -46,7 +46,7 @@ mimetype: application/x-microsoft.net.object.binary.base64 value : The object must be serialized with - : System.Serialization.Formatters.Binary.BinaryFormatter + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter : and then encoded with base64 encoding. mimetype: application/x-microsoft.net.object.soap.base64 @@ -60,6 +60,7 @@ : and then encoded with base64 encoding. --> + @@ -68,9 +69,10 @@ - + + @@ -85,9 +87,10 @@ - + + @@ -109,9 +112,9 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 \ No newline at end of file diff --git a/VisEl/VisableComponents/MyTreeView.Designer.cs b/VisEl/VisableComponents/MyTreeView.Designer.cs new file mode 100644 index 0000000..1fb9ca5 --- /dev/null +++ b/VisEl/VisableComponents/MyTreeView.Designer.cs @@ -0,0 +1,59 @@ +namespace VisableComponents +{ + partial class MyTreeView + { + /// + /// Обязательная переменная конструктора. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Освободить все используемые ресурсы. + /// + /// истинно, если управляемый ресурс должен быть удален; иначе ложно. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Код, автоматически созданный конструктором компонентов + + /// + /// Требуемый метод для поддержки конструктора — не изменяйте + /// содержимое этого метода с помощью редактора кода. + /// + private void InitializeComponent() + { + this.treeView = new System.Windows.Forms.TreeView(); + this.SuspendLayout(); + // + // treeView + // + this.treeView.Location = new System.Drawing.Point(3, 3); + this.treeView.Name = "treeView"; + this.treeView.Size = new System.Drawing.Size(421, 397); + this.treeView.TabIndex = 0; + // + // MyTreeView + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSize = true; + this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.BackColor = System.Drawing.SystemColors.ControlDark; + this.Controls.Add(this.treeView); + this.Name = "MyTreeView"; + this.Size = new System.Drawing.Size(427, 403); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TreeView treeView; + } +} diff --git a/VisEl/VisableComponents/MyTreeView.cs b/VisEl/VisableComponents/MyTreeView.cs new file mode 100644 index 0000000..535faf8 --- /dev/null +++ b/VisEl/VisableComponents/MyTreeView.cs @@ -0,0 +1,118 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Xml.Linq; + +namespace VisableComponents +{ + + public partial class MyTreeView : UserControl + { + List hierarchy = new List(); + public MyTreeView() + { + InitializeComponent(); + } + public void addToHierarchy(List list) { hierarchy = list; } + public int GetId + { + get { + if(treeView.SelectedNode.FirstNode == null) + return treeView.SelectedNode.Index; + return -1; + } + + } + public object GetNode(T nodeClass) where T: Type + { + if (hierarchy == null || hierarchy.Count == 0) + { + throw new Exception("Не задана иерархия"); + } + if (treeView.SelectedNode?.FirstNode != null) + { + + throw new Exception("Выбран не крайний элемент"); + } + var res = Activator.CreateInstance(nodeClass); + T child; + TreeNode? parent = treeView.SelectedNode; + do + { + if (nodeClass.GetField(parent.Name) == null) + nodeClass.GetProperty(parent.Name).SetValue(res, parent.Text); + else nodeClass.GetField(parent.Name).SetValue(res, parent.Text); + parent = parent.Parent; + } while (parent != null); + return res; + } + public void LoadTree(List nodes) + { + if(hierarchy == null || hierarchy.Count == 0) + { + throw new Exception("Не задана иерархия"); + } + treeView.Nodes.Clear(); + foreach (T node in nodes) + { + TreeNode parent = null; + Type type = node.GetType(); + foreach(string step in hierarchy) + { + var aa = type.GetFields(); + if (type.GetField(step) != null || type.GetProperty(step) != null) + { + var value = type.GetField(step) == null ? type.GetProperty(step).GetValue(node) : type.GetField(step).GetValue(node); + TreeNode[] nodesLevel; + + if (parent == null) + { + + nodesLevel = treeView.Nodes.Find(step, false); + TreeNode currentNode = nodesLevel.FirstOrDefault(x => x.Text.Equals(value)); + if (currentNode is null) + { + TreeNode newNode = new TreeNode(value.ToString()); + newNode.Name = step; + treeView.Nodes.Add(newNode); + parent = newNode; + }else + { + parent = currentNode; + continue; + } + } + else + { + + nodesLevel = parent.Nodes.Find(step, false); + TreeNode currentNode = nodesLevel.FirstOrDefault(x => x.Text.Equals(value)); + if (currentNode is null) + { + TreeNode newNode = new TreeNode(value.ToString()); + newNode.Name = step; + parent.Nodes.Add(newNode); + parent = newNode; + }else + { + parent = currentNode; + continue; + } + } + + } + else break; + + + } + } + } + } +} diff --git a/VisEl/VisableComponents/MyTreeView.resx b/VisEl/VisableComponents/MyTreeView.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/VisEl/VisableComponents/MyTreeView.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/VisEl/VisableComponents/VisableComponents.csproj b/VisEl/VisableComponents/VisableComponents.csproj new file mode 100644 index 0000000..13138fe --- /dev/null +++ b/VisEl/VisableComponents/VisableComponents.csproj @@ -0,0 +1,22 @@ + + + + net6.0-windows + enable + true + enable + + + + + UserControl + + + UserControl + + + UserControl + + + + diff --git a/VisEl/WinFormsApp1/TestForm.csproj b/VisEl/WinFormsApp1/TestForm.csproj new file mode 100644 index 0000000..c70eb07 --- /dev/null +++ b/VisEl/WinFormsApp1/TestForm.csproj @@ -0,0 +1,24 @@ + + + + WinExe + net6.0-windows + enable + true + enable + + + + + + + + + Form + + + Form + + + + \ No newline at end of file