Обновить элементы управления в форме 1 из формы 2, созданной формой 1 - PullRequest
0 голосов
/ 03 мая 2019

Я проверил и нашел эту статью, на которую много раз упоминается вопрос такого типа, и это НЕ тот ответ, который я хочу ...

У меня есть форма, Form_Main frmMainPage, она создает Form_Status frmStatus. Когда это происходит, я отключаю элементы управления на frmMainPage, чтобы пользователь не мог связываться с вещами во время обработки. Когда все выполнено, они могут закрыть окно frmStatus, чтобы вернуться к frmMainPage, чтобы продолжить работу. Я не могу повторно включить элементы управления с frmStatus. Я пытался использовать frmMainPage_Enter, но он сходит с ума при первой загрузке, так что на самом деле это не вариант.

У меня есть следующее в Form_Main.cs

public void EnableForm() {
    this.gridData.Enabled = true;
    this.txtLocation.Enabled = true;
    this.txtSupplier.Enabled = true;
    this.txtItem.Enabled = true;

    this.FillTable("", "", "");
}

Когда я использую это (согласно статье выше):

private void btnClose_Click(object sender, EventArgs e) {
    Form_Main f2 = new Form_Main();
    f2.Show();
    f2.EnableForm();

    this.Close();
}

Создает секунду Form_Main, которая не , что я хочу. Я хочу знать, как изменить элементы управления в существующей форме.

Редактировать: Нет, это не это , что также было предложено. Большинство ответов касаются изменения элементов управления в Форме 2 из Формы 1, когда Форма 2 создается Формой 1. В моем случае мне нужно сделать обратное и изменить элементы управления в Форме 1 ОТ Формы 2, которая была создана в Форме 1. Вид круглой вещи.

Ответы [ 2 ]

1 голос
/ 03 мая 2019

вам не нужно делать это отключить включить. вам просто нужно показать новое с помощью ShowDialog (); как это:

frmStatus.ShowDialog();

вместо просто:

frmStatus.Show();
1 голос
/ 03 мая 2019

Я могу придумать пару способов сделать это. Первый (и наиболее распространенный) - это показ второй формы модально (что означает, что код первой формы приостанавливается во время выполнения кода второй формы):

private void button1_Click(object sender, EventArgs e)
{
    var statusForm = new frmStatus();

    // ShowDialog will prevent frmMainPage from being accessible.
    // This form's code will pause at the next line until the second form is closed
    statusForm.ShowDialog();
}

Есть случаи, когда вы хотите, чтобы обе формы были доступны одновременно. Если это так, другим способом было бы добавить обработчик события для события FormClosed второй формы, где вы можете повторно включить элементы управления в первой форме. Это позволит одновременно получить доступ к обеим формам:

private void button1_Click(object sender, EventArgs e)
{
    var statusForm = new frmStatus();

    // Add an event handler for the second form's FormClosed event, and
    // put code in that event handler to re-enable controls on this form
    statusForm.FormClosed += statusForm_FormClosed;

    // Disable our controls on this form and show the second form
    DisableForm();
    statusForm.Show();
}

private void statusForm_FormClosed(object sender, FormClosedEventArgs e)
{
    // When the second form closes, re-enable controls on this form
    EnableForm();
}

private void DisableForm()
{
    this.gridData.Enabled = false;
    this.txtLocation.Enabled = false;
    this.txtSupplier.Enabled = false;
    this.txtItem.Enabled = false;
}

public void EnableForm() 
{
    this.gridData.Enabled = true;
    this.txtLocation.Enabled = true;
    this.txtSupplier.Enabled = true;
    this.txtItem.Enabled = true;

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