Обновить основную форму после закрытия вторичной формы? - PullRequest
0 голосов
/ 27 марта 2012

Я работаю над формой для добавления новых клиентов. В этой форме пользователь выбирает адрес в выпадающем списке (cbbAdress). Рядом с полем со списком адресов есть также «новая» кнопка, которая открывает новую форму.

   frmAdres frmAdres = new frmAdres();
   frmAdres.Show();

В этой форме пользователи могут добавить новый адрес. Когда они закрывают форму, поле со списком (cbbAdress) не обновляется (очевидно). Мне интересно, как я мог бы сделать combobox (cbbAdress) на главной форме обновления?

Спасибо, Thomas

Ответы [ 3 ]

2 голосов
/ 27 марта 2012

Передайте конструктору frmAdres ссылку на родительскую форму

frmAdres frmAdres = new frmAdres(this); 
frmAdres.Show(); 

в конструкторе формы

private MainForm mainForm;

public frmAfres(MainForm _mainForm) : this()
{
    this.mainForm = _mainForm;
}

(используя это для вызова конструктора по умолчанию),Затем вы можете получить доступ к любому элементу управления в главной форме, который имеет соответствующий метод доступа.Так что для вашего ComboBox в вашей MainForm у вас может быть конструктор

public ComboBox myCombo
{
    get { retrun this.comboBoxName; }
    set { this.comboBoxName = value; }
}

, тогда вы можете обновить только этот элемент управления в своем классе frmAdres через

mainForm.myCombo.Update();

Альтернативно, вы можетепросто обновите всю родительскую форму с frmadres до

this.ParentForm.Update();

, это должно обновить ваш ComboBox.Надеюсь, это поможет.

2 голосов
/ 27 марта 2012

Измените свой код на что-то похожее ниже:

using (frmAdres frmAdres = new frmAdres())
{
 if (frmAdres.ShowDialog() == DialogResult.OK)
 {
   //Update your address here
   Address d = frmAddress.SelectedAddress;
 }
}

, очевидно, вам нужно будет убедиться, что вы установили DialogResult на OK в форме адреса при нажатии кнопки Сохранить, и добавили свойство в адрес frmAddressФорма для чтения выбранного адреса.

Если вы нажмете кнопку "Закрыть" в форме, и результат диалога не будет "OK", тогда код в блоке "if" не попадет.

РазмещениеФорма в «использующей» фигурной скобке также удалит ее после того, как она выйдет из контекста фигурной скобки, что означает, что вы не можете забыть об ее утилизации.

1 голос
/ 27 марта 2012

Make Singleton :), с помощью Singleton вы можете обмениваться строками через классы.

public class MySingleton
        {
            private static Classes.MySingleton _mInstance;

            public static Classes.MySingleton Instance
            {
                get { return _mInstance ?? (_mInstance = new Classes.MySingleton()); }
            }

            private string _cbbadress;

            /// <summary>
            /// cbbAdress.
            /// </summary>
            public string cbbadress
            {
                get { return _cbbadress; }
                set { _cbbadress = value; }
            }
        }

Редактировать строку с помощью:

        Classes.MySingleton.Instance.cbbadress = cbbAdress.Text;

РЕДАКТИРОВАТЬ: Я узнал это таким образом, конечно, есть много других способов сделать это.

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