Вопрос:
У меня есть поле со списком на моем С#, которое находится в форме с именем frmMain которая автоматически заполняется, когда я добавляю (используя кнопку button1_Click) продукт в моей настройке с именем frmSettings. Когда я нажимаю кнопку button1_Click я хочу перезагрузить frmMain для нового добавленного продукта.
Я попытался использовать
frmMain main = new frmMain(); main.Close(); main.Show();
Я знаю, что этот код настолько забавный, но он не работает. : D
Это форма окон!
РЕДАКТИРОВАТЬ
Пожалуйста, посмотрите этот образ моей программы для лучшего понимания. Это мой frmMain
Вот как выглядят мои настройки frmSettings. Итак, как вы можете видеть, когда я нажимаю кнопку отправки, я хочу, чтобы frmMain перезагрузился, чтобы обновленное значение, которое я добавил к настройкам, будет видимым для frmMain comboBox.
Лучший ответ:
Обновление. Поскольку вы изменили свой вопрос, вот обновленная версия для обновления ваших продуктов.
Это ваша продукция:
private frmMain main; public frmSettings(frmMain mainForm) { main = mainForm; InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { main.AddProduct(textBox1.Text); }
Ему понадобится основная форма в конструкторе для передачи данных к нему.
И основная форма:
private frmSettings settings; private List<string> products = new List<string>(); public frmMain() { InitializeComponent(); //load products from somewhere } private void button1_Click(object sender, EventArgs e) { if (settings == null) { settings = new frmSettings(this); } settings.Show(); } private void UpdateForm() { comboBoxProducts.Items.Clear(); comboBoxProducts.Items.AddRange(products.ToArray()); //Other updates } public void AddProduct(string product) { products.Add(product); UpdateForm(); }
Затем вы можете вызывать UpdateForm() всюду по вашей форме, например, другую кнопку. В этом примере для хранения ваших продуктов используется только локальная переменная. Также есть некоторые проверки для добавления продукта, но я думаю, вы поняли, что…
Ответ №1
Нет такого встроенного метода, чтобы установить все ваши значения по вашему желанию. Как я упоминал в комментарии, что вы должны создать метод с необходимыми настройками всех элементов управления, вот пример кода:
private void ReloadForm() { comboBox.ResetText(); dataGridView.Update(); //and how many controls or settings you want, just add them here } private void button1_Click(object sender, EventArgs e) { ReloadForm(); //and call that method on your button click } Ответ №2
вы хотите аннулировать форму
http://msdn.microsoft.com/en-us/library/598t492a.aspx
Ответ №3
Попробуйте этот код.
this.Refresh(); Application.Doevents(); Ответ №4
ЕСЛИ вы хотите обновить страницу из usercontrol. Здесь вы найдете примеры, в которых я amrefreshing form from usercontrol. Найдите форму, в которой эта кнопка перезагрузки. Затем вызовите Invalidify tab tab и обновите его.
Dim myForm As Form = btnAuthorise.FindForm() For Each c As Control In myForm.Controls If c.Name = «tabControlName» Then DirectCast(c, System.Windows.Forms.TabControl).Invalidate() DirectCast(c, System.Windows.Forms.TabControl).Refresh() ‘force the call to the drawitem event End If Next Ответ №5this.Refresh(); Refresh(); this.Hide(); frmScholars ss = new frmScholars(); ss.Show(); Ответ №6
Я думаю, что, вызывая frmMain_load(sender,e) когда вы нажимаете кнопку, необходимо перезагрузить форму.
Вы также можете попробовать Invalidate() форму, как сказал @Nahum.