diff --git a/anbs_cp/CountFormatter.cs b/anbs_cp/CountFormatter.cs
index f6b608b..05bba3a 100644
--- a/anbs_cp/CountFormatter.cs
+++ b/anbs_cp/CountFormatter.cs
@@ -7,54 +7,28 @@
{
#region Cвойства класса
///
- /// Имена чисел ( , тысяч, миллионов, миллиардов и триллионов)
+ /// Имена чисел (тысяч, миллионов, миллиардов и т.п.)
///
- public string[] SizeNames { get; set; } = { "Байт", "Кб", "Мб", "Гб", "Тб" };
+ public string[] CountNames { get; set; } = { "", "тыс.", "млн.", "млрд." };
///
/// Знаков после запятой
///
- public byte DecimalPlaces { get; set; } = 2;
+ public byte DecimalPlaces { get; set; } = 1;
///
- /// Максимально байт (далее идут Кбайты)
+ /// Делители чисел
///
- public long ByteMax { get; set; } = 1024;
- ///
- /// Максимально Кбайт (далее идут Мбайты)
- ///
- public long KByteMax { get; set; } = 1048576;
- ///
- /// Максимально Мбайт (далее идут Гбайты)
- ///
- public long MByteMax { get; set; } = 1073741824;
- ///
- /// Максимально Гбайт (далее идут Тбайты)
- ///
- public long GByteMax { get; set; } = 1099511627776;
+ public long[] Delimeters { get; set; } = { 1000, 1000000, 1000000000 };
#endregion
#region Реализация интерфейса
///
/// Реализация интерфейса
///
- public string[] ValueNames { get => SizeNames; set => SizeNames = value; }
+ public string[] ValueNames { get => CountNames; set => CountNames = value; }
///
/// Реализация интерфейса
///
- public long[] MaxSizes
- {
- get => new long[] { ByteMax, KByteMax, MByteMax, GByteMax };
- set
- {
- ByteMax = value[0];
- KByteMax = value[1];
- MByteMax = value[2];
- GByteMax = value[3];
- }
- }
- ///
- /// Реализация интерфейса
- ///
- public string Format(long value) => (this as IValueFormatter).Format(value);
+ public long[] MaxSizes { get => Delimeters; set => Delimeters = value; }
#endregion
}
}
\ No newline at end of file
diff --git a/anbs_cp/FileSizeFormatter.cs b/anbs_cp/FileSizeFormatter.cs
index e8e5537..a4cbd33 100644
--- a/anbs_cp/FileSizeFormatter.cs
+++ b/anbs_cp/FileSizeFormatter.cs
@@ -51,10 +51,6 @@
GByteMax = value[3];
}
}
- ///
- /// Реализация интерфейса
- ///
- public string Format(long value) => (this as IValueFormatter).Format(value);
#endregion
}
}
\ No newline at end of file
diff --git a/anbs_cp/IValueFormatter.cs b/anbs_cp/IValueFormatter.cs
index 510d18e..36e0d3b 100644
--- a/anbs_cp/IValueFormatter.cs
+++ b/anbs_cp/IValueFormatter.cs
@@ -29,23 +29,29 @@
/// Форматированная размерность (например, 20 Мб)
public string Format(long value)
{
- //Bytes
- if (value < MaxSizes[0])
- return $"{value} {ValueNames[0]}";
- //KiloBytes
- if ((value >= MaxSizes[0]) && (value < MaxSizes[1]))
- return $"{FrmtSize(value, MaxSizes[0])} {ValueNames[1]}";
- //MegaBytes
- if ((value >= MaxSizes[1]) && (value < MaxSizes[2]))
- return $"{FrmtSize(value, MaxSizes[1])} {ValueNames[2]}";
- //GigaBytes
- if ((value >= MaxSizes[2]) && (value < MaxSizes[3]))
- return $"{FrmtSize(value, MaxSizes[2])} {ValueNames[3]}";
- //TeraBytes
- if (value >= MaxSizes[3])
- return $"{FrmtSize(value, MaxSizes[3])} {ValueNames[4]}";
- //Не определён
- return $"{value} {ValueNames[0]}";
+ //Левая граница
+ long leftnum;
+ //Правая граница
+ long rightnum;
+
+ for (int i = 0; i <= MaxSizes.Length; i++)
+ {
+ if (i == 0)
+ leftnum = 0;
+ else
+ leftnum = MaxSizes[i - 1];
+
+ if (i == MaxSizes.Length)
+ rightnum = long.MaxValue;
+ else
+ rightnum = MaxSizes[i];
+
+ if ((value >= leftnum) && (value < rightnum))
+ return $"{FormatValue(value, leftnum)} {ValueNames[i]}";
+
+ }
+
+ return value.ToString();
}
///
/// Деление числа на число с DecimalPlaces знаками после запятой
@@ -53,8 +59,13 @@
/// Делимое число
/// Число-делитель
/// Частное (с DecimalPlaces знаками после запятой)
- private string FrmtSize(long dividend, long divider)
+ private string FormatValue(long dividend, long divider)
{
+ if (divider == 0)
+ {
+ return $"{dividend}";
+ }
+
long delim = 1;
for (int i = 0; i <= DecimalPlaces; i++)
diff --git a/anbs_cp/anbs_cp.csproj b/anbs_cp/anbs_cp.csproj
index bc9380c..8d583a6 100644
--- a/anbs_cp/anbs_cp.csproj
+++ b/anbs_cp/anbs_cp.csproj
@@ -29,4 +29,8 @@
True
+
+
+
+
diff --git a/anbsoftware.componentspack.sln b/anbsoftware.componentspack.sln
index 4570fac..adc732b 100644
--- a/anbsoftware.componentspack.sln
+++ b/anbsoftware.componentspack.sln
@@ -1,10 +1,15 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 16
-VisualStudioVersion = 16.0.31424.327
+# Visual Studio Version 17
+VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "anbs_cp", "anbs_cp\anbs_cp.csproj", "{442A56CC-1061-4EB5-8B67-3E3D997976D7}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "demo", "demo\demo.csproj", "{3BB0778D-3C34-4DD8-A54E-CB476BEF2F7B}"
+ ProjectSection(ProjectDependencies) = postProject
+ {442A56CC-1061-4EB5-8B67-3E3D997976D7} = {442A56CC-1061-4EB5-8B67-3E3D997976D7}
+ EndProjectSection
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -15,6 +20,9 @@ Global
{442A56CC-1061-4EB5-8B67-3E3D997976D7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{442A56CC-1061-4EB5-8B67-3E3D997976D7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{442A56CC-1061-4EB5-8B67-3E3D997976D7}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3BB0778D-3C34-4DD8-A54E-CB476BEF2F7B}.Debug|Any CPU.ActiveCfg = Release|Any CPU
+ {3BB0778D-3C34-4DD8-A54E-CB476BEF2F7B}.Debug|Any CPU.Build.0 = Release|Any CPU
+ {3BB0778D-3C34-4DD8-A54E-CB476BEF2F7B}.Release|Any CPU.ActiveCfg = Debug.CNF|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/demo/CountValueTest.Designer.cs b/demo/CountValueTest.Designer.cs
new file mode 100644
index 0000000..6656a3b
--- /dev/null
+++ b/demo/CountValueTest.Designer.cs
@@ -0,0 +1,134 @@
+namespace demo
+{
+ partial class CountValueTest
+ {
+ ///
+ /// 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.InsertDataLabel = new System.Windows.Forms.Label();
+ this.InsertDataBox = new System.Windows.Forms.TextBox();
+ this.ResultLabel = new System.Windows.Forms.Label();
+ this.CalculateButton = new System.Windows.Forms.Button();
+ this.SelectFormatterLabel = new System.Windows.Forms.Label();
+ this.SelectFormatterBox = new System.Windows.Forms.ComboBox();
+ this.SuspendLayout();
+ //
+ // InsertDataLabel
+ //
+ this.InsertDataLabel.AutoSize = true;
+ this.InsertDataLabel.Location = new System.Drawing.Point(12, 66);
+ this.InsertDataLabel.Name = "InsertDataLabel";
+ this.InsertDataLabel.Size = new System.Drawing.Size(197, 17);
+ this.InsertDataLabel.TabIndex = 0;
+ this.InsertDataLabel.Text = "&Insert any int value:";
+ //
+ // InsertDataBox
+ //
+ this.InsertDataBox.Location = new System.Drawing.Point(12, 86);
+ this.InsertDataBox.Name = "InsertDataBox";
+ this.InsertDataBox.Size = new System.Drawing.Size(246, 24);
+ this.InsertDataBox.TabIndex = 1;
+ //
+ // ResultLabel
+ //
+ this.ResultLabel.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.ResultLabel.Location = new System.Drawing.Point(0, 143);
+ this.ResultLabel.Margin = new System.Windows.Forms.Padding(5);
+ this.ResultLabel.Name = "ResultLabel";
+ this.ResultLabel.Padding = new System.Windows.Forms.Padding(5);
+ this.ResultLabel.Size = new System.Drawing.Size(270, 79);
+ this.ResultLabel.TabIndex = 2;
+ this.ResultLabel.Text = "&Insert any int value to insert box above and press \"Calculate\" button to see res" +
+ "ult...";
+ this.ResultLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // CalculateButton
+ //
+ this.CalculateButton.Location = new System.Drawing.Point(81, 116);
+ this.CalculateButton.Name = "CalculateButton";
+ this.CalculateButton.Size = new System.Drawing.Size(103, 23);
+ this.CalculateButton.TabIndex = 3;
+ this.CalculateButton.Text = "Calc&ulate";
+ this.CalculateButton.UseVisualStyleBackColor = true;
+ this.CalculateButton.Click += new System.EventHandler(this.CalculateButton_Click);
+ //
+ // SelectFormatterLabel
+ //
+ this.SelectFormatterLabel.AutoSize = true;
+ this.SelectFormatterLabel.Location = new System.Drawing.Point(12, 9);
+ this.SelectFormatterLabel.Name = "SelectFormatterLabel";
+ this.SelectFormatterLabel.Size = new System.Drawing.Size(161, 17);
+ this.SelectFormatterLabel.TabIndex = 4;
+ this.SelectFormatterLabel.Text = "&Select formatter:";
+ //
+ // SelectFormatterBox
+ //
+ this.SelectFormatterBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.SelectFormatterBox.FlatStyle = System.Windows.Forms.FlatStyle.System;
+ this.SelectFormatterBox.FormattingEnabled = true;
+ this.SelectFormatterBox.Items.AddRange(new object[] {
+ "CountFormatter",
+ "FileSizeFormatter"});
+ this.SelectFormatterBox.Location = new System.Drawing.Point(12, 29);
+ this.SelectFormatterBox.Name = "SelectFormatterBox";
+ this.SelectFormatterBox.Size = new System.Drawing.Size(246, 25);
+ this.SelectFormatterBox.TabIndex = 5;
+ //
+ // CountValueTest
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 17F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(270, 222);
+ this.Controls.Add(this.SelectFormatterBox);
+ this.Controls.Add(this.SelectFormatterLabel);
+ this.Controls.Add(this.CalculateButton);
+ this.Controls.Add(this.ResultLabel);
+ this.Controls.Add(this.InsertDataBox);
+ this.Controls.Add(this.InsertDataLabel);
+ this.Font = new System.Drawing.Font("Courier New", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
+ this.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ this.MaximizeBox = false;
+ this.MinimizeBox = false;
+ this.Name = "CountValueTest";
+ this.ShowIcon = false;
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "Formatter Test Unit";
+ this.Load += new System.EventHandler(this.CountValueTest_Load);
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private Label InsertDataLabel;
+ private TextBox InsertDataBox;
+ private Label ResultLabel;
+ private Button CalculateButton;
+ private Label SelectFormatterLabel;
+ private ComboBox SelectFormatterBox;
+ }
+}
\ No newline at end of file
diff --git a/demo/CountValueTest.cs b/demo/CountValueTest.cs
new file mode 100644
index 0000000..defe9b7
--- /dev/null
+++ b/demo/CountValueTest.cs
@@ -0,0 +1,42 @@
+using anbs_cp;
+namespace demo
+{
+ public partial class CountValueTest : Form
+ {
+ public CountValueTest()
+ {
+ InitializeComponent();
+ }
+
+ private void CalculateButton_Click(object sender, EventArgs e)
+ {
+
+ if (string.IsNullOrEmpty(InsertDataBox.Text))
+ return;
+
+ IValueFormatter formatter;
+
+ long value = TypeConverter.StrToInt64(InsertDataBox.Text);
+
+ switch (SelectFormatterBox.SelectedIndex)
+ {
+ case 0:
+ formatter = new CountFormatter();
+ break;
+ case 1:
+ formatter = new FileSizeFormatter();
+ break;
+ default:
+ formatter = new CountFormatter();
+ break;
+ }
+
+ ResultLabel.Text = formatter.Format(value);
+ }
+
+ private void CountValueTest_Load(object sender, EventArgs e)
+ {
+ SelectFormatterBox.SelectedIndex = 0;
+ }
+ }
+}
\ No newline at end of file
diff --git a/demo/CountValueTest.resx b/demo/CountValueTest.resx
new file mode 100644
index 0000000..f298a7b
--- /dev/null
+++ b/demo/CountValueTest.resx
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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/demo/Program.cs b/demo/Program.cs
new file mode 100644
index 0000000..47c0157
--- /dev/null
+++ b/demo/Program.cs
@@ -0,0 +1,15 @@
+namespace demo
+{
+ internal static class Program
+ {
+ ///
+ /// The main entry point for the application.
+ ///
+ [STAThread]
+ static void Main()
+ {
+ ApplicationConfiguration.Initialize();
+ Application.Run(new CountValueTest());
+ }
+ }
+}
\ No newline at end of file
diff --git a/demo/demo.csproj b/demo/demo.csproj
new file mode 100644
index 0000000..10977d6
--- /dev/null
+++ b/demo/demo.csproj
@@ -0,0 +1,16 @@
+
+
+
+ WinExe
+ net6.0-windows
+ enable
+ true
+ enable
+ Release;Debug.CNF
+
+
+
+
+
+
+
\ No newline at end of file