1 компонент рабочий

This commit is contained in:
Илья 2024-09-22 13:24:14 +04:00
parent cf9dc68b63
commit 3feb33895e
11 changed files with 390 additions and 29 deletions

View File

@ -0,0 +1,11 @@
namespace RodionovLibrary.NonVisualComponents.HelperModels
{
public class WordLongTextInfo
{
public string FileName { get; set; } = string.Empty;
public string Title { get; set; } = string.Empty;
public string[] Paragraphs { get; set; } = Array.Empty<string>();
}
}

View File

@ -0,0 +1,36 @@
namespace RodionovLibrary.NonVisualComponents
{
partial class WordDiagramComponent
{
/// <summary>
/// Обязательная переменная конструктора.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Освободить все используемые ресурсы.
/// </summary>
/// <param name="disposing">истинно, если управляемый ресурс должен быть удален; иначе ложно.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Код, автоматически созданный конструктором компонентов
/// <summary>
/// Требуемый метод для поддержки конструктора — не изменяйте
/// содержимое этого метода с помощью редактора кода.
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
}
#endregion
}
}

View File

@ -0,0 +1,19 @@
using System.ComponentModel;
namespace RodionovLibrary.NonVisualComponents
{
public partial class WordDiagramComponent : Component
{
public WordDiagramComponent()
{
InitializeComponent();
}
public WordDiagramComponent(IContainer container)
{
container.Add(this);
InitializeComponent();
}
}
}

View File

@ -0,0 +1,36 @@
namespace RodionovLibrary.NonVisualComponents
{
partial class WordLongTextComponent
{
/// <summary>
/// Обязательная переменная конструктора.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Освободить все используемые ресурсы.
/// </summary>
/// <param name="disposing">истинно, если управляемый ресурс должен быть удален; иначе ложно.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Код, автоматически созданный конструктором компонентов
/// <summary>
/// Требуемый метод для поддержки конструктора — не изменяйте
/// содержимое этого метода с помощью редактора кода.
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
}
#endregion
}
}

View File

@ -0,0 +1,95 @@
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using RodionovLibrary.NonVisualComponents.HelperModels;
using System.ComponentModel;
namespace RodionovLibrary.NonVisualComponents
{
public partial class WordLongTextComponent : Component
{
private WordprocessingDocument? _wordDocument;
private Body? _docBody;
public WordLongTextComponent()
{
InitializeComponent();
}
public WordLongTextComponent(IContainer container)
{
container.Add(this);
InitializeComponent();
}
public void CreateWordText(WordLongTextInfo textInfo)
{
if (string.IsNullOrEmpty(textInfo.FileName) || string.IsNullOrEmpty(textInfo.Title) || !CheckData(textInfo.Paragraphs))
{
throw new Exception("Не все данные заполнены");
}
_wordDocument = WordprocessingDocument.Create(textInfo.FileName, WordprocessingDocumentType.Document);
MainDocumentPart mainPart = _wordDocument.AddMainDocumentPart();
mainPart.Document = new Document();
_docBody = mainPart.Document.AppendChild(new Body());
AddText(textInfo);
_wordDocument.MainDocumentPart!.Document.Save();
_wordDocument.Dispose();
}
private void AddText(WordLongTextInfo textInfo)
{
if (_docBody == null || _wordDocument == null)
{
return;
}
AddParagraph(textInfo.Title, fontSize: "48", isBold: true);
foreach (var paragraph in textInfo.Paragraphs)
{
AddParagraph(paragraph, fontSize: "24", isBold: false);
}
}
private void AddParagraph(string text, string fontSize, bool isBold)
{
if (_docBody == null)
{
return;
}
ParagraphProperties paragraphProperties = new();
paragraphProperties.AppendChild(new Justification { Val = JustificationValues.Both });
Paragraph paragraph = new();
paragraph.AppendChild(paragraphProperties);
Run docRun = new();
RunProperties runProperties = new();
runProperties.AppendChild(new FontSize { Val = fontSize });
if (isBold)
{
runProperties.AppendChild(new Bold());
}
docRun.AppendChild(runProperties);
docRun.AppendChild(new Text(text));
paragraph.AppendChild(docRun);
_docBody.Append(paragraph);
}
private bool CheckData(string[] data)
{
return data != null && data.Any() && data.All(d => !string.IsNullOrEmpty(d));
}
}
}

View File

@ -0,0 +1,36 @@
namespace RodionovLibrary.NonVisualComponents
{
partial class WordTableComponent
{
/// <summary>
/// Обязательная переменная конструктора.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Освободить все используемые ресурсы.
/// </summary>
/// <param name="disposing">истинно, если управляемый ресурс должен быть удален; иначе ложно.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Код, автоматически созданный конструктором компонентов
/// <summary>
/// Требуемый метод для поддержки конструктора — не изменяйте
/// содержимое этого метода с помощью редактора кода.
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
}
#endregion
}
}

View File

@ -0,0 +1,19 @@
using System.ComponentModel;
namespace RodionovLibrary.NonVisualComponents
{
public partial class WordTableComponent : Component
{
public WordTableComponent()
{
InitializeComponent();
}
public WordTableComponent(IContainer container)
{
container.Add(this);
InitializeComponent();
}
}
}

View File

@ -7,4 +7,8 @@
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<PackageReference Include="DocumentFormat.OpenXml" Version="3.0.2" />
</ItemGroup>
</Project> </Project>

View File

@ -28,6 +28,7 @@
/// </summary> /// </summary>
private void InitializeComponent() private void InitializeComponent()
{ {
components = new System.ComponentModel.Container();
comboBoxControl = new RodionovLibrary.VisualComponents.ComboBoxControl(); comboBoxControl = new RodionovLibrary.VisualComponents.ComboBoxControl();
listBoxControl = new RodionovLibrary.VisualComponents.ListBoxControl(); listBoxControl = new RodionovLibrary.VisualComponents.ListBoxControl();
textBoxControl = new RodionovLibrary.VisualComponents.TextBoxControl(); textBoxControl = new RodionovLibrary.VisualComponents.TextBoxControl();
@ -40,46 +41,50 @@
buttonGetObject = new Button(); buttonGetObject = new Button();
buttonGetIndex = new Button(); buttonGetIndex = new Button();
buttonSetIndex = new Button(); buttonSetIndex = new Button();
panel1 = new Panel();
buttonWordDiagram = new Button();
buttonWordTable = new Button();
buttonWordText = new Button();
wordLongTextComponent = new RodionovLibrary.NonVisualComponents.WordLongTextComponent(components);
panel1.SuspendLayout();
SuspendLayout(); SuspendLayout();
// //
// comboBoxControl // comboBoxControl
// //
comboBoxControl.AutoSize = true; comboBoxControl.AutoSize = true;
comboBoxControl.AutoSizeMode = AutoSizeMode.GrowAndShrink; comboBoxControl.AutoSizeMode = AutoSizeMode.GrowAndShrink;
comboBoxControl.Location = new Point(45, 27); comboBoxControl.Location = new Point(39, 125);
comboBoxControl.Margin = new Padding(3, 4, 3, 4);
comboBoxControl.Name = "comboBoxControl"; comboBoxControl.Name = "comboBoxControl";
comboBoxControl.SelectedValue = ""; comboBoxControl.SelectedValue = "";
comboBoxControl.Size = new Size(210, 32); comboBoxControl.Size = new Size(185, 26);
comboBoxControl.TabIndex = 0; comboBoxControl.TabIndex = 0;
// //
// listBoxControl // listBoxControl
// //
listBoxControl.AutoSize = true; listBoxControl.AutoSize = true;
listBoxControl.AutoSizeMode = AutoSizeMode.GrowAndShrink; listBoxControl.AutoSizeMode = AutoSizeMode.GrowAndShrink;
listBoxControl.Location = new Point(45, 276); listBoxControl.Location = new Point(39, 312);
listBoxControl.Margin = new Padding(3, 4, 3, 4);
listBoxControl.Name = "listBoxControl"; listBoxControl.Name = "listBoxControl";
listBoxControl.SelectedIndex = -1; listBoxControl.SelectedIndex = -1;
listBoxControl.Size = new Size(647, 488); listBoxControl.Size = new Size(567, 367);
listBoxControl.TabIndex = 1; listBoxControl.TabIndex = 1;
// //
// textBoxControl // textBoxControl
// //
textBoxControl.AutoSize = true; textBoxControl.AutoSize = true;
textBoxControl.AutoSizeMode = AutoSizeMode.GrowAndShrink; textBoxControl.AutoSizeMode = AutoSizeMode.GrowAndShrink;
textBoxControl.Location = new Point(446, 27); textBoxControl.Location = new Point(390, 125);
textBoxControl.Margin = new Padding(3, 4, 3, 4);
textBoxControl.Name = "textBoxControl"; textBoxControl.Name = "textBoxControl";
textBoxControl.Pattern = null; textBoxControl.Pattern = null;
textBoxControl.Size = new Size(246, 31); textBoxControl.Size = new Size(216, 26);
textBoxControl.TabIndex = 2; textBoxControl.TabIndex = 2;
// //
// buttonClear // buttonClear
// //
buttonClear.Location = new Point(47, 66); buttonClear.Location = new Point(41, 155);
buttonClear.Margin = new Padding(3, 2, 3, 2);
buttonClear.Name = "buttonClear"; buttonClear.Name = "buttonClear";
buttonClear.Size = new Size(94, 29); buttonClear.Size = new Size(82, 22);
buttonClear.TabIndex = 3; buttonClear.TabIndex = 3;
buttonClear.Text = "Отчистка"; buttonClear.Text = "Отчистка";
buttonClear.UseVisualStyleBackColor = true; buttonClear.UseVisualStyleBackColor = true;
@ -87,9 +92,10 @@
// //
// buttonGetComboBox // buttonGetComboBox
// //
buttonGetComboBox.Location = new Point(47, 114); buttonGetComboBox.Location = new Point(41, 191);
buttonGetComboBox.Margin = new Padding(3, 2, 3, 2);
buttonGetComboBox.Name = "buttonGetComboBox"; buttonGetComboBox.Name = "buttonGetComboBox";
buttonGetComboBox.Size = new Size(165, 29); buttonGetComboBox.Size = new Size(144, 22);
buttonGetComboBox.TabIndex = 4; buttonGetComboBox.TabIndex = 4;
buttonGetComboBox.Text = "Получение значения"; buttonGetComboBox.Text = "Получение значения";
buttonGetComboBox.UseVisualStyleBackColor = true; buttonGetComboBox.UseVisualStyleBackColor = true;
@ -97,9 +103,10 @@
// //
// buttonSetComboBox // buttonSetComboBox
// //
buttonSetComboBox.Location = new Point(47, 165); buttonSetComboBox.Location = new Point(41, 229);
buttonSetComboBox.Margin = new Padding(3, 2, 3, 2);
buttonSetComboBox.Name = "buttonSetComboBox"; buttonSetComboBox.Name = "buttonSetComboBox";
buttonSetComboBox.Size = new Size(165, 29); buttonSetComboBox.Size = new Size(144, 22);
buttonSetComboBox.TabIndex = 5; buttonSetComboBox.TabIndex = 5;
buttonSetComboBox.Text = "Установка значения"; buttonSetComboBox.Text = "Установка значения";
buttonSetComboBox.UseVisualStyleBackColor = true; buttonSetComboBox.UseVisualStyleBackColor = true;
@ -107,9 +114,10 @@
// //
// buttonGetTextBox // buttonGetTextBox
// //
buttonGetTextBox.Location = new Point(446, 66); buttonGetTextBox.Location = new Point(390, 155);
buttonGetTextBox.Margin = new Padding(3, 2, 3, 2);
buttonGetTextBox.Name = "buttonGetTextBox"; buttonGetTextBox.Name = "buttonGetTextBox";
buttonGetTextBox.Size = new Size(165, 29); buttonGetTextBox.Size = new Size(144, 22);
buttonGetTextBox.TabIndex = 6; buttonGetTextBox.TabIndex = 6;
buttonGetTextBox.Text = "Получение значения"; buttonGetTextBox.Text = "Получение значения";
buttonGetTextBox.UseVisualStyleBackColor = true; buttonGetTextBox.UseVisualStyleBackColor = true;
@ -117,9 +125,10 @@
// //
// buttonSetTextBox // buttonSetTextBox
// //
buttonSetTextBox.Location = new Point(446, 114); buttonSetTextBox.Location = new Point(390, 191);
buttonSetTextBox.Margin = new Padding(3, 2, 3, 2);
buttonSetTextBox.Name = "buttonSetTextBox"; buttonSetTextBox.Name = "buttonSetTextBox";
buttonSetTextBox.Size = new Size(165, 29); buttonSetTextBox.Size = new Size(144, 22);
buttonSetTextBox.TabIndex = 7; buttonSetTextBox.TabIndex = 7;
buttonSetTextBox.Text = "Установка значения"; buttonSetTextBox.Text = "Установка значения";
buttonSetTextBox.UseVisualStyleBackColor = true; buttonSetTextBox.UseVisualStyleBackColor = true;
@ -127,9 +136,10 @@
// //
// buttonSetWrongTextBox // buttonSetWrongTextBox
// //
buttonSetWrongTextBox.Location = new Point(446, 165); buttonSetWrongTextBox.Location = new Point(390, 229);
buttonSetWrongTextBox.Margin = new Padding(3, 2, 3, 2);
buttonSetWrongTextBox.Name = "buttonSetWrongTextBox"; buttonSetWrongTextBox.Name = "buttonSetWrongTextBox";
buttonSetWrongTextBox.Size = new Size(246, 29); buttonSetWrongTextBox.Size = new Size(215, 22);
buttonSetWrongTextBox.TabIndex = 8; buttonSetWrongTextBox.TabIndex = 8;
buttonSetWrongTextBox.Text = "Установка значения (неверное)"; buttonSetWrongTextBox.Text = "Установка значения (неверное)";
buttonSetWrongTextBox.UseVisualStyleBackColor = true; buttonSetWrongTextBox.UseVisualStyleBackColor = true;
@ -137,9 +147,10 @@
// //
// buttonGetObject // buttonGetObject
// //
buttonGetObject.Location = new Point(699, 463); buttonGetObject.Location = new Point(612, 452);
buttonGetObject.Margin = new Padding(3, 2, 3, 2);
buttonGetObject.Name = "buttonGetObject"; buttonGetObject.Name = "buttonGetObject";
buttonGetObject.Size = new Size(165, 29); buttonGetObject.Size = new Size(144, 22);
buttonGetObject.TabIndex = 9; buttonGetObject.TabIndex = 9;
buttonGetObject.Text = "Получение объекта"; buttonGetObject.Text = "Получение объекта";
buttonGetObject.UseVisualStyleBackColor = true; buttonGetObject.UseVisualStyleBackColor = true;
@ -147,9 +158,10 @@
// //
// buttonGetIndex // buttonGetIndex
// //
buttonGetIndex.Location = new Point(699, 516); buttonGetIndex.Location = new Point(612, 492);
buttonGetIndex.Margin = new Padding(3, 2, 3, 2);
buttonGetIndex.Name = "buttonGetIndex"; buttonGetIndex.Name = "buttonGetIndex";
buttonGetIndex.Size = new Size(165, 29); buttonGetIndex.Size = new Size(144, 22);
buttonGetIndex.TabIndex = 10; buttonGetIndex.TabIndex = 10;
buttonGetIndex.Text = "Получение индекса"; buttonGetIndex.Text = "Получение индекса";
buttonGetIndex.UseVisualStyleBackColor = true; buttonGetIndex.UseVisualStyleBackColor = true;
@ -157,19 +169,66 @@
// //
// buttonSetIndex // buttonSetIndex
// //
buttonSetIndex.Location = new Point(699, 569); buttonSetIndex.Location = new Point(612, 532);
buttonSetIndex.Margin = new Padding(3, 2, 3, 2);
buttonSetIndex.Name = "buttonSetIndex"; buttonSetIndex.Name = "buttonSetIndex";
buttonSetIndex.Size = new Size(165, 29); buttonSetIndex.Size = new Size(144, 22);
buttonSetIndex.TabIndex = 11; buttonSetIndex.TabIndex = 11;
buttonSetIndex.Text = "Установка индекса"; buttonSetIndex.Text = "Установка индекса";
buttonSetIndex.UseVisualStyleBackColor = true; buttonSetIndex.UseVisualStyleBackColor = true;
buttonSetIndex.Click += ButtonSetIndex_Click; buttonSetIndex.Click += ButtonSetIndex_Click;
// //
// panel1
//
panel1.BackColor = Color.White;
panel1.BorderStyle = BorderStyle.FixedSingle;
panel1.Controls.Add(buttonWordDiagram);
panel1.Controls.Add(buttonWordTable);
panel1.Controls.Add(buttonWordText);
panel1.Location = new Point(41, 10);
panel1.Name = "panel1";
panel1.Size = new Size(715, 100);
panel1.TabIndex = 12;
//
// buttonWordDiagram
//
buttonWordDiagram.Location = new Point(528, 29);
buttonWordDiagram.Margin = new Padding(3, 2, 3, 2);
buttonWordDiagram.Name = "buttonWordDiagram";
buttonWordDiagram.Size = new Size(135, 34);
buttonWordDiagram.TabIndex = 15;
buttonWordDiagram.Text = "Word (диаграмма)";
buttonWordDiagram.UseVisualStyleBackColor = true;
buttonWordDiagram.Click += ButtonWordDiagram_Click;
//
// buttonWordTable
//
buttonWordTable.Location = new Point(288, 29);
buttonWordTable.Margin = new Padding(3, 2, 3, 2);
buttonWordTable.Name = "buttonWordTable";
buttonWordTable.Size = new Size(135, 34);
buttonWordTable.TabIndex = 14;
buttonWordTable.Text = "Word (таблица)";
buttonWordTable.UseVisualStyleBackColor = true;
buttonWordTable.Click += ButtonWordTable_Click;
//
// buttonWordText
//
buttonWordText.Location = new Point(47, 29);
buttonWordText.Margin = new Padding(3, 2, 3, 2);
buttonWordText.Name = "buttonWordText";
buttonWordText.Size = new Size(135, 34);
buttonWordText.TabIndex = 13;
buttonWordText.Text = "Word (текст)";
buttonWordText.UseVisualStyleBackColor = true;
buttonWordText.Click += ButtonWordText_Click;
//
// FormTest // FormTest
// //
AutoScaleDimensions = new SizeF(8F, 20F); AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font; AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(878, 787); ClientSize = new Size(779, 692);
Controls.Add(panel1);
Controls.Add(buttonSetIndex); Controls.Add(buttonSetIndex);
Controls.Add(buttonGetIndex); Controls.Add(buttonGetIndex);
Controls.Add(buttonGetObject); Controls.Add(buttonGetObject);
@ -182,8 +241,11 @@
Controls.Add(textBoxControl); Controls.Add(textBoxControl);
Controls.Add(listBoxControl); Controls.Add(listBoxControl);
Controls.Add(comboBoxControl); Controls.Add(comboBoxControl);
Margin = new Padding(3, 2, 3, 2);
Name = "FormTest"; Name = "FormTest";
StartPosition = FormStartPosition.CenterScreen;
Text = "FormTest"; Text = "FormTest";
panel1.ResumeLayout(false);
ResumeLayout(false); ResumeLayout(false);
PerformLayout(); PerformLayout();
} }
@ -202,5 +264,10 @@
private Button buttonGetObject; private Button buttonGetObject;
private Button buttonGetIndex; private Button buttonGetIndex;
private Button buttonSetIndex; private Button buttonSetIndex;
private Panel panel1;
private Button buttonWordDiagram;
private Button buttonWordTable;
private Button buttonWordText;
private RodionovLibrary.NonVisualComponents.WordLongTextComponent wordLongTextComponent;
} }
} }

View File

@ -1,3 +1,6 @@
using RodionovLibrary.NonVisualComponents.HelperModels;
using System.Windows.Forms;
namespace WinForms namespace WinForms
{ {
public partial class FormTest : Form public partial class FormTest : Form
@ -64,5 +67,37 @@ namespace WinForms
{ {
listBoxControl.SelectedIndex = 0; listBoxControl.SelectedIndex = 0;
} }
private void ButtonWordText_Click(object sender, EventArgs e)
{
try
{
wordLongTextComponent.CreateWordText(new WordLongTextInfo()
{
FileName = AppDomain.CurrentDomain.BaseDirectory + "test.docx",
Title = "ГЛАВА 1. Нежданные гости",
Paragraphs = new string[] { "Жил-был в норе под землей хоббит. Не в какой-то там мерзкой грязной сырой норе, где со всех сторон торчат хвосты червей и противно пахнет плесенью, но и не в сухой песчаной голой норе, где не на что сесть и нечего съесть. Нет, нора была хоббичья, а значит — благоустроенная.",
"Она начиналась идеально круглой, как иллюминатор, дверью, выкрашенной зеленой краской, с сияющей медной ручкой точно посередине. Дверь отворялась внутрь, в длинный коридор, похожий на железнодорожный туннель, но туннель без гари и без дыма и тоже очень благоустроенный: стены там были обшиты панелями, пол выложен плитками и устлан ковром, вдоль стен стояли полированные стулья, и всюду были прибиты крючочки для шляп и пальто, так как хоббит любил гостей.",
"Туннель вился все дальше и дальше и заходил довольно глубоко, но не в самую глубину Холма, как его именовали жители на много миль в окружности. По обеим сторонам туннеля шли двери — много-много круглых дверей. Хоббит не признавал восхождений по лестницам: спальни, ванные, погреба, кладовые (целая куча кладовых), гардеробные (хоббит отвел несколько комнат под хранение одежды), кухни, столовые располагались в одном этаже и, более того, в одном и том же коридоре.",
"Лучшие комнаты находились по левую руку, и только в них имелись окна — глубоко сидящие круглые окошечки с видом на сад и на дальние луга, спускавшиеся к реке."}
});
MessageBox.Show("Готово!");
}
catch (Exception ex)
{
MessageBox.Show("Произошла ошибка: " + ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ButtonWordTable_Click(object sender, EventArgs e)
{
}
private void ButtonWordDiagram_Click(object sender, EventArgs e)
{
}
} }
} }

View File

@ -117,4 +117,7 @@
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<metadata name="wordLongTextComponent.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root> </root>