Mohamed Ali Khamis Ответов: 3

Управление компонентами формы из другой формы в C#


у меня есть две формы , первая содержит несколько текстовых полей, для которых по умолчанию Enabled Proprieties установлено значение false, я хочу установить Enabled в true, когда закрываю вторую форму .

Что я уже пробовал:

Я установил изменения в public для текстовых полей

Код
private void Data_FormClosing(object sender, FormClosingEventArgs e)
    {
        Main frm = new Main();

        frm.bSave.Enabled = true;
        frm.bEdit.Enabled = true;
        frm.tClient.Enabled = true;
        frm.tType.Enabled = true;
        frm.tFirst.Enabled = true;
        frm.tSecond.Enabled = true;
        frm.tDriver.Enabled = true;
        frm.tCity.Enabled = true;
        frm.tDriver.Enabled = true;
        frm.tNumber.Enabled = true;
        frm.tPrice.Enabled = true;
    }

3 Ответов

Рейтинг:
1

OriginalGriff

Вы создаете новую основную форму, а затем пытаетесь повлиять на ее элементы управления, которые не имеют ничего общего с существующей и не будут влиять ни на что в ней.
Кроме того, ваша вторая форма не должна даже знать о существовании основной формы, а тем более иметь доступ к ее элементам управления.

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


Mohamed Ali Khamis

спасибо ,я нашел решение и тестирую его, чтобы выяснить, не вызовет ли оно каких-либо ошибок

Рейтинг:
0

Dave Kreskowiak

Формы никогда не должны знать ни о других формах, ни о контроле над ними. Это связывает их вместе, так что код/форма не могут быть повторно использованы в другом месте.

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

Формы должны быть связаны только с их собственным контролем, а не с контролем над другими формами.


Mohamed Ali Khamis

спасибо ,я нашел решение и тестирую его, чтобы выяснить, не вызовет ли оно каких-либо ошибок

Рейтинг:
0

Mohamed Ali Khamis

Мне удалось управлять текстовыми полями, добавив этот код в первую форму

public partial class Main : Form
   {
       private static Main frm;
       static void frm_FormClosed(object sender,FormClosedEventArgs e)
       {
           frm = null;
       }
       public static Main getMainForm
       {
           get
           {
               if(frm==null)
               {
                   frm = new Main();
                   frm.FormClosed += new FormClosedEventHandler(frm_FormClosed);

               }
               return frm;
           }
       }


и двойным щелчком мыши datagridview во второй форме

private void dataGridView1_DoubleClick(object sender, EventArgs e)
       {

           Main.getMainForm.bSave.Enabled = true;
           Main.getMainForm.bSave.Enabled = true;
           Main.getMainForm.tClient.Enabled = true;
           Main.getMainForm.tType.Enabled = true;
           Main.getMainForm.tFirst.Enabled = true;
           Main.getMainForm.tSecond.Enabled = true;
           Main.getMainForm.tDriver.Enabled = true;
           Main.getMainForm.tCity.Enabled = true;
           Main.getMainForm.tNumber.Enabled = true;
           Main.getMainForm.tPrice.Enabled = true;

           this.Close();

       }


Dave Kreskowiak

Да... это не сработает. Вы все еще создаете новый экземпляр основной формы, а не используете существующий экземпляр формы.