доработаны формы-меню
This commit is contained in:
parent
6256105b42
commit
f440212793
@ -34,8 +34,8 @@ class Program
|
||||
mainMenu.AddOption("About me", () => PrintAboutMe());
|
||||
mainMenu.AddOption("Array sort", () => new ArraySortDemo().Run());
|
||||
mainMenu.AddOption("Snake game", () => {
|
||||
SnakeGame game = new SnakeGame(difficulty, sizex, sizey);
|
||||
game.start();
|
||||
mainMenuForm.Hide();
|
||||
snakeDiffMenuForm.Show();
|
||||
});
|
||||
mainMenu.AddOption("Exit", () => Exit());
|
||||
|
||||
@ -44,8 +44,13 @@ class Program
|
||||
Utils.Arrays withTwoParams = new Utils.Arrays(10, 100);
|
||||
|
||||
mainMenuForm = new MenuForm(mainMenu);
|
||||
snakeDiffMenuForm = new MenuForm(difficultyMenu);
|
||||
snakeSizeMenuForm = new MenuForm(sizeMenu);
|
||||
snakeDiffMenuForm = new MenuForm(difficultyMenu, () => { snakeDiffMenuForm.SwitchToForm(snakeSizeMenuForm); });
|
||||
snakeSizeMenuForm = new MenuForm(sizeMenu, () =>
|
||||
{
|
||||
SnakeGame game = new SnakeGame(difficulty, sizex, sizey);
|
||||
game.start();
|
||||
snakeSizeMenuForm.SwitchToForm(mainMenuForm);
|
||||
});
|
||||
|
||||
Application.Run(mainMenuForm);
|
||||
|
||||
|
@ -21,6 +21,22 @@ namespace ProgLab1.GUI
|
||||
this.Width = 800;
|
||||
this.Height = 600;
|
||||
AddMenu(consoleMenu);
|
||||
this.FormClosing += new FormClosingEventHandler((object sender, FormClosingEventArgs e) => { e.Cancel = true; });
|
||||
}
|
||||
|
||||
public MenuForm(Menu consoleMenu, Action onAny)
|
||||
{
|
||||
InitializeComponent();
|
||||
this.Width = 800;
|
||||
this.Height = 600;
|
||||
AddMenu(consoleMenu, onAny);
|
||||
this.FormClosing += new FormClosingEventHandler((object sender, FormClosingEventArgs e) => { e.Cancel = true; });
|
||||
}
|
||||
|
||||
public void SwitchToForm(Form form)
|
||||
{
|
||||
form.Show();
|
||||
this.Hide();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -66,5 +82,61 @@ namespace ProgLab1.GUI
|
||||
|
||||
this.Controls.Add(buttonPanel);
|
||||
}
|
||||
|
||||
private void AddMenu(Menu consoleMenu, Action onAny)
|
||||
{
|
||||
|
||||
FlowLayoutPanel buttonPanel = new FlowLayoutPanel
|
||||
{
|
||||
Dock = DockStyle.Fill, // Растягиваем на всю форму
|
||||
FlowDirection = FlowDirection.TopDown, // Кнопки располагаются сверху вниз
|
||||
WrapContents = false // Запрет переноса
|
||||
};
|
||||
|
||||
Label menuLabel = new Label
|
||||
{
|
||||
Text = consoleMenu.GetTitle(), // Текст заголовка
|
||||
Font = new System.Drawing.Font("Arial", 16, System.Drawing.FontStyle.Bold), // Стиль шрифта
|
||||
TextAlign = System.Drawing.ContentAlignment.MiddleCenter, // Выравнивание текста по центру
|
||||
Dock = DockStyle.Top, // Заголовок сверху
|
||||
Height = 40 // Высота заголовка
|
||||
};
|
||||
|
||||
buttonPanel.Controls.Add(menuLabel);
|
||||
|
||||
foreach (MenuOption option in consoleMenu.GetOptions())
|
||||
{
|
||||
Button button = new Button
|
||||
{
|
||||
Text = option.Name,
|
||||
Width = buttonPanel.Width - 10,
|
||||
Height = 40,
|
||||
Margin = new Padding(5),
|
||||
};
|
||||
|
||||
// Связываем обработчик с OnSelect из консольного меню
|
||||
button.Click += (sender, e) => option.Action();
|
||||
button.Click += (sender, e) => onAny();
|
||||
|
||||
buttonPanel.Controls.Add(button);
|
||||
}
|
||||
|
||||
this.Controls.Add(buttonPanel);
|
||||
}
|
||||
|
||||
private void FormClosingHandler(object sender, FormClosingEventArgs e)
|
||||
{
|
||||
// Предотвращаем закрытие окна
|
||||
DialogResult result = MessageBox.Show("Вы уверены, что хотите закрыть окно?", "Подтверждение", MessageBoxButtons.YesNo);
|
||||
|
||||
if (result == DialogResult.No)
|
||||
{
|
||||
e.Cancel = true; // Отменяем закрытие окна
|
||||
}
|
||||
else
|
||||
{
|
||||
e.Cancel = false; // Разрешаем закрытие окна
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user