-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathForm1.cs
More file actions
142 lines (134 loc) · 5.77 KB
/
Form1.cs
File metadata and controls
142 lines (134 loc) · 5.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
namespace PassGen
{
/// <summary>
/// Главная форма приложения для генерации паролей.
/// Предоставляет графический интерфейс для выбора параметров и генерации криптографически стойких паролей.
/// </summary>
public partial class MainForm : Form
{
private readonly PasswordGenerator _passwordGenerator = new();
private string _password = string.Empty;
private int _passwordLength = 12;
/// <summary>
/// Генерирует новый пароль на основе текущих настроек пользовательского интерфейса.
/// В случае ошибки отображает сообщение об ошибке в поле пароля.
/// </summary>
/// <remarks>
/// Метод собирает параметры из элементов управления формы, вызывает генератор паролей
/// и обновляет поле отображения. Все исключения обрабатываются, и их сообщения
/// выводятся пользователю вместо пароля.
/// </remarks>
private void GeneratePassword()
{
var options = new PasswordGenerator.PasswordOptions(
Length: _passwordLength,
IncludeCapital: CheckBoxCapital.Checked,
IncludeLower: CheckBoxLower.Checked,
IncludeNumbers: CheckBoxNumber.Checked,
IncludeLine: CheckBoxLine.Checked,
IncludeSpecial: CheckBoxSpecial.Checked,
ForceCategories: CheckBoxForce.Checked,
Readable: CheckBoxReadable.Checked
);
try
{
_password = _passwordGenerator.Generate(options);
}
catch (ArgumentException ex)
{
_password = ex.Message;
}
finally
{
FieldPassword.Text = _password;
}
}
/// <summary>
/// Инициализирует новый экземпляр формы MainForm.
/// Настраивает начальное состояние UI и создает всплывающие подсказки для элементов управления.
/// </summary>
public MainForm()
{
InitializeComponent();
GeneratePassword();
// Инициализация всплывающих подсказок
ToolTip toolTip = new();
toolTip.SetToolTip(CheckBoxLine, "Символы \"-\" и \"_\"");
toolTip.SetToolTip(CheckBoxSpecial, "Разные специальные символы");
toolTip.SetToolTip(CheckBoxNumber, "Включение цифр в пароль");
toolTip.SetToolTip(CheckBoxLower, "Включение строчных букв в пароль (a-z)");
toolTip.SetToolTip(CheckBoxCapital, "Включение заглавных букв в пароль (A-Z)");
toolTip.SetToolTip(CheckBoxForce, "В пароле будет не менее одного символа из каждой отмеченной категории");
toolTip.SetToolTip(CheckBoxReadable, "В пароле не будут попадаться символы, которые легко спутать (например, 0 и O или l и I)");
toolTip.SetToolTip(ButtonCopy, "Скопировать пароль в буфер обмена");
toolTip.SetToolTip(SizeBar, "Двигая влево и вправо, можно изменить длину пароля");
toolTip.SetToolTip(LabelScrollValue, "Текущая длина пароля");
toolTip.SetToolTip(ButtonGen, "Создать новый пароль");
toolTip.SetToolTip(FieldPassword, "Созданные пароли. Нажми, чтобы скопировать");
}
/// <summary>
/// Обработчик нажатия кнопки "Создать".
/// Запускает генерацию нового пароля.
/// </summary>
/// <param name="sender">Источник события (кнопка ButtonGen).</param>
/// <param name="e">Данные события.</param>
private void ButtonGen_Click(object sender, EventArgs e)
{
GeneratePassword();
}
/// <summary>
/// Обработчик изменения состояния чекбоксов категорий символов.
/// Автоматически перегенерирует пароль при изменении настроек.
/// </summary>
/// <param name="sender">Источник события (любой из чекбоксов).</param>
/// <param name="e">Данные события.</param>
private void CheckBox_CheckedChanged(object sender, EventArgs e)
{
GeneratePassword();
}
/// <summary>
/// Обработчик нажатия кнопки "Копировать".
/// Копирует текущий пароль в буфер обмена Windows.
/// </summary>
/// <param name="sender">Источник события (кнопка ButtonCopy).</param>
/// <param name="e">Данные события.</param>
/// <remarks>
/// Копирование выполняется только если пароль не пустой.
/// </remarks>
private void ButtonCopy_Click(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(_password))
{
Clipboard.SetText(_password);
}
}
/// <summary>
/// Обработчик изменения позиции ползунка длины пароля.
/// Обновляет длину пароля и автоматически генерирует новый пароль.
/// </summary>
/// <param name="sender">Источник события (TrackBar SizeBar).</param>
/// <param name="e">Данные события.</param>
private void SizeBar_Scroll(object sender, EventArgs e)
{
_passwordLength = SizeBar.Value;
LabelScrollValue.Text = "Длина пароля: " + _passwordLength;
GeneratePassword();
}
/// <summary>
/// Обработчик нажатия на поле с паролем.
/// Копирует текущий пароль в буфер обмена Windows.
/// </summary>
/// <param name="sender">Источник события (поле FieldPassword).</param>
/// <param name="e">Данные события.</param>
/// <remarks>
/// Копирование выполняется только если пароль не пустой.
/// </remarks>
private void FieldPassword_Click(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(_password))
{
Clipboard.SetText(_password);
}
}
}
}