Как изменяется свойство Form.Modal при использовании кнопки в форме? - PullRequest
0 голосов
/ 21 марта 2019

Я использую 2 формы в приложении, в котором нажатие кнопки в форме 1 открывает форму 2. При открытии формы 2 свойство Modal формы 2 имеет значение ЛОЖЬ. Но после нажатия кнопки в форме 2 значение этого свойства устанавливается в значение ИСТИНА. Я использовал приведенный ниже код в приложении.

Form1

private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
bool isModal = f2.Modal;
f2.ShowDialog();
}

Form2

private void button1_Click(object sender, EventArgs e)
{
bool isModal = this.Modal;
}

Пожалуйста, поделитесь своими идеями о том, как это обновляется?

Спасибо

Sindhu

Ответы [ 3 ]

2 голосов
/ 21 марта 2019

Состояние docs :

Получает значение, указывающее, отображается ли эта форма модально.

Ключевое слово здесь это .

Давайте посмотрим на ваш код:

Form2 f2 = new Form2();
bool isModal = f2.Modal;
f2.ShowDialog();

Вопрос, который вам нужно задать: «во второй строке, это форма в то время показывается модально? "

Ответ ясно Нет , поскольку он отображается только модально в строке третьей . Если вы думаете логически, это имеет смысл.Форма не знает , будете ли вы звонить Show или ShowDialog - поэтому Modal не может рассказать вам о будущем - она ​​может только рассказать вам о текущем положении дел.

Таким образом, во второй строке Modal должен (в соответствии с документами) вернуть false.

ОК, так почему это так?

private void button1_Click(object sender, EventArgs e)
{
bool isModal = this.Modal;
}

Итак, основываясь на документах, мы должны спросить себя, отображается ли this в данный момент модально при нажатии кнопки.Да в то время это так, поэтому должно (согласно документации) вернуть true.

0 голосов
/ 21 марта 2019

Как сказал @CodingYoshi, метод, который устанавливает Form.Modal в true, равен Form.ShowDialog().Вот почему f2.Modal ложно, потому что оно вызывается до f2.ShowDialog().
Проблема заключается в проверке f2.Modal после вызова f2.ShowDialog.Проблема в том, что после вызова f2.ShowDialog() невозможно выполнить какие-либо дополнительные строки кода в блоке кода.Таким образом, нет способа вызвать f2.Modal.
Лучший способ увидеть это различие - сначала проверить Modal в своем конструкторе, а затем проверить его снова в событии Form.Load.Конструктор вызывается до вызова ShowDialog, но Form.Load и Button.clicked вызываются после вызова ShowDialog.Таким образом, у вас есть различные значения для свойства Modal.
Здесь конструктор Form2:

Sub New ()
    ' This call is required by the designer.
    InitializeComponent()

    Console.WriteLine(Me.Modal) ' is always false
End Sub

А затем Form.Loading событие Form2:

Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Console.WriteLine(Me.Modal) ' will return true if object is called via ShowDialog()
End Sub
0 голосов
/ 21 марта 2019

Хотя может показаться, что это связано с кнопками, это не так.Это связано с методом ShowDialog();.

Если вы проверите до f2.ShowDialog();, Modal будет ложным.Проверьте после, и оно будет истинным.

Это f2.ShowDialog(); - это то, что устанавливает для свойства значение true.

Вы можете использовать f2.Show(), и в этом случае оно останется ложным по очевидной причине.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...