У меня есть форма Form1
, из которой я показываю Form2
в качестве модальной формы. От Form2
Я делаю все виды редактирования и удаления различных значений, которые должны быть отражены в Form1
после закрытия Form2
. Так что я делаю RePopulateControls_in_Form1()
после закрытия Form2
. Поскольку RePopulateControls_in_Form1()
является длинным процессом, я хочу выполнить этот метод только в том случае, если какая-либо модификация (изменение, добавление, удаление) происходит в Form2
, а не когда Form2
только что открыт и закрыт.DialogResult, который не закрывает форму?
Так это то, что я пытаюсь сделать в Form1
:
Form2 f = new Form2();
if (f.ShowDialog(this) == DialogResult.Something)
RePopulateControls_in_Form1()
А потом в Form2 я,
private void bntEdit()
{
//If Edit?
this.DialogResult = DialogResult.Something;
}
private void bntAdd()
{
//If Add?
this.DialogResult = DialogResult.Something;
}
private void bntDelete()
{
//If Delete?
this.DialogResult = DialogResult.Something;
}
Но моя проблема .Something
. Если это ничего, кроме .None
, Form2
просто закрывается. Я не хочу, чтобы Form2
просто закрывался, если пользователь не закрыл его.
Если я это сделать:
RePopulateControls_in_Form1()
не попал!
Вкратце, в моей программе, как я могу сказать компилятору, чтобы вызвать RePopulateControls_in_Form1()
, только если значения изменены в Form2
?
Примечание. Повторное завершение обязательно требуется, поскольку элементы управления динамически создаются и немного сложны (на самом деле то, что создано в Form2
, является элементом управления графическим интерфейсом и его метками и т. Д.).
OK Я получаю первую часть, но вторая логика не является правильной методикой кодирования! – nawfal
Почему? В приведенном выше случае я бы использовал событие. Однако, если есть значение, которое используется во всем приложении, которое имеет 20 форм и в десять раз больше, чем многие классы, как бы вы гарантировали, что используется только одно значение. Вы предпочли бы передать значение из формы в форму и класс в класс с помощью параметра или свойств конструктора .... – ScruffyDuck
Это просто, как просто установить флаг, чтобы Form1 знал что-то о Form2.Почему глобальная переменная, которая не является потоковой безопасностью? Я понимаю значение общей глобальной переменной, когда вы должны использовать ее в 220 классах, как вы упомянули выше. Но здесь мы не только должны избегать статических переменных, которые спят на протяжении всего жизненного цикла приложения, насколько это возможно, но, что более важно, мне интересно, как бы вы предвидели требование, упомянутое в вопросе, масштабирующееся, чтобы быть чем-то вроде большой, чтобы работать в 220 классах из моего простого вопроса :) – nawfal