здраствуйте! у меня проблема:
наработает условие visible (советую прочитать чтобы было понятно другое)
и вот я придумал как решить эту проблему! дело в том что код который мы создали срабатывал 1 раз иза того что он проверялся через событие load а этот load срабатывал 1 раз потому что потом он работал через hide/showe. так вот в чем идея? мы при каждом изменением дизайна через mesegebox будем спрашивать сохранить изменение или нет и если человек ответит да то с отсчетом в 2 секунды приложение запустится И значение у нашего чекбокса ДОЛЖНО СОХРАНИТЬСЯ и потом при запуске программы когда человек еще не прогрузил все формы свойства hide/show еще не будут работать и программа через событие load проверит какое значение у чекбокса сейчас! короче говоря надо сделать код который сам перезапустит программу по тем условиям которые я говорил и сохранит значение у чекбоса. надеюсь понятно)
AlexP
(Alex P.)
11.Март.2021 17:10:43
#2
Это с чего такой вывод? Что там проверять, там же просто видимость картинки менялась. Только не у той формы, которая показана на экране.
Ну вот пример как можно сделать. Совсем прям простой и в лоб.
public class GlobalSettings
{
bool _button1Visible = true;
bool _button2Visible = true;
bool _button3Visible = true;
public bool Button1Visible
{
get { return _button1Visible; }
set
{
_button1Visible = value;
SettingsChange?.Invoke(this, new EventArgs()); // можно прработать делегат чтобы передавать конкретное измененное свойство
}
}
public bool Button2Visible
{
get { return _button2Visible; }
set
{
_button2Visible = value;
SettingsChange?.Invoke(this, new EventArgs()); // можно прработать делегат чтобы передавать конкретное измененное свойство
}
}
public bool Button3Visible
{
get { return _button3Visible; }
set
{
_button3Visible = value;
SettingsChange?.Invoke(this, new EventArgs()); // можно прработать делегат чтобы передавать конкретное измененное свойство
}
}
/// <summary>
/// Событие обновления каких то параметров настроек
/// </summary>
public event EventHandler SettingsChange;
}
Самая главная форма приложения
public partial class Form1 : Form
{
GlobalSettings settings = new GlobalSettings();
List<BasedForm> ControlledForms = new List<BasedForm>();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
for (int i = 0; i < 5; i++)
{
BasedForm nform = new BasedForm();
// подписываем форму на измененеия
settings.SettingsChange += (ox, ex) => { nform.UpdateState(ox as GlobalSettings); };
// добавляем в список
ControlledForms.Add(nform);
// показываем
nform.Show();
nform.TopMost = true;
nform.Location = new Point(10 + ControlledForms.Count * nform.Width + 5, 20);
// опционально, если файл настроек был загружен предварительно
nform.UpdateState(settings);
}
}
Тут меняем параметры настроек
private void CheckChangeBoxes(object sender, EventArgs e)
{
if(sender is CheckBox cbos)
{
if (cbos == checkBox1) settings.Button1Visible = cbos.Checked;
if (cbos == checkBox2) settings.Button2Visible = cbos.Checked;
if (cbos == checkBox3) settings.Button3Visible = cbos.Checked;
}
}
}
Базовые формы которые необходимо менять
public partial class BasedForm : Form
{
public BasedForm()
{
InitializeComponent();
}
public void UpdateState(GlobalSettings settings)
{
button1.Visible = settings.Button1Visible;
button2.Visible = settings.Button2Visible;
button3.Visible = settings.Button3Visible;
}
}
WindowsFormsApp1.7z (4.4 КБ)
Данный метод будет создавать единый стиль для всех дочерних окон. Для сохранения настроек и загрузки нужно позаботится отдельно любым способом.
дайте пожалуйста исходники
AlexP
(Alex P.)
13.Март.2021 14:09:01
#6
Так а тут же и есть почти всё, просто создать 2 формы с этими именами, на одной 3 чекбокса, на другой 3 кнопки.
я хочу увидить это сам. мне так проще
Что увидеть то?? Все исходники фактически выложил.
Ну вот, смотрите.
WindowsFormsApp1.7z (21.6 КБ)
сделал как все сказали! но в этой строчке кода ошибка!
а имено в название
WorldMaster:
UpdateState
mr_нонсон
(Дмитрий)
14.Март.2021 10:45:02
#13
Severity
Code
Description
Project
File
Line
Suppression State
Error
CS0051
Inconsistent accessibility: parameter type ‘GlobalSettings’ is less accessible than method ‘update.UpdateState(GlobalSettings)’
REx
G:\работа\REx\Resources\common version\update.cs
257
Active
public void **UpdateState**(GlobalSettings settings)
{
update_newYear.Visible = settings.Button1Visible;
}
AlexP
(Alex P.)
14.Март.2021 10:49:44
#14
public
в объявлении класса GlobalSettings
добавить.
AlexP
(Alex P.)
14.Март.2021 11:12:38
#16
это
public class GlobalSettings
{
У вас так получается то?? У вас есть 100% рабочий исходный код. Откуда может взяться ошибка то??
Поставьте русскую студию чтобы по сообщения об ошибках было человечьим языком.
mr_нонсон
(Дмитрий)
14.Март.2021 11:48:35
#18
хмм нечего не работает! может это иза того как появляются эти формы? я вам ща скину сурсы для примера
AlexP
(Alex P.)
14.Март.2021 11:54:23
#19
Так английский тоже человечий. И он используется намного большим числом человеков, так что проще гуглить ошибки.
mr_нонсон
(Дмитрий)
14.Март.2021 12:49:51
#20
вот пример как работает меню и т.д.
AlexP
(Alex P.)
14.Март.2021 12:55:31
#21
Так и что тут смотреть? Тут нет GlobalSettings
и т.д.