2014-02-20 4 views
0

У меня есть 2 формы - Form1 и Form2, Form1 имеют свойство ComboBox, Form2 имеет FormBorderStyle как FixedToolWindow. Мне нужно вызвать ComboBox из Form2, как мне это сделать?Вызов ComboBox из другой формы

+1

какой именно хотите сделать? «1. Вы хотите позвонить другому из существующей формы при нажатии кнопки ?, 2. вызвать другую форму, выбирая значение из combobox ?, 3. получить доступ к выпадающей форме другой формы из текущей формы?» – Shell

+3

Нет, нет. Вы ничего не можете вызывать из любого ComboBox, потому что Microsoft написала код для класса ComboBox, и вы не можете его изменить. Вы на самом деле имеете в виду, что вам нужно отображать Form2, когда изменяется выбор в ComboBox в Form1? Если это так, вы просто используете тот же код, но в обработчике событий SelectedIndexChanged или SelectionChangeCommitted ComboBox вместо обработчика события Click кнопки. В любом случае, код является частью Form1. Если это не то, что вы имеете в виду, пожалуйста, предоставьте полное и понятное объяснение, что вы хотите – jmcilhinney

+0

Okey. Но как отправить выбранные данные из Form2 в Form1? –

ответ

0

Я вижу, что вопрос был изменен и значение значительно изменилось.

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

Check this out. В части 3 объясняется, как это ДОЛЖНО быть сделано.

Вот относительно надуманный пример:

Form1:

using System; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private Form2 form2Instance; 

     private void button1_Click(object sender, EventArgs e) 
     { 
      // Check whether there is already a Form2 instance open. 
      if (this.form2Instance == null || this.form2Instance.IsDisposed) 
      { 
       // Create a new Form2 instance and handle the appropriate event. 
       this.form2Instance = new Form2(); 
       this.form2Instance.SelectedValueChanged += form2Instance_SelectedValueChanged; 
      } 

      // Make sure the Form2 instance is displayed and active. 
      this.form2Instance.Show(); 
      this.form2Instance.Activate(); 
     } 

     private void form2Instance_SelectedValueChanged(object sender, EventArgs e) 
     { 
      // Update the ComboBox based on the selection in Form2. 
      this.comboBox1.SelectedIndex = this.form2Instance.SelectedValue; 
     } 
    } 
} 

Form2:

using System; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form2 : Form 
    { 
     public Form2() 
     { 
      InitializeComponent(); 
     } 

     /// <summary> 
     /// Gets the value selected in the NumericUpDown as an int. 
     /// </summary> 
     public int SelectedValue { get { return Convert.ToInt32(this.numericUpDown1.Value); } } 

     /// <summary> 
     /// Raised when the value in the NumericUpDown changes. 
     /// </summary> 
     public event EventHandler SelectedValueChanged; 

     private void numericUpDown1_ValueChanged(object sender, EventArgs e) 
     { 
      if (this.SelectedValueChanged != null) 
      { 
       // Notify any listeners that the selection has changed. 
       this.SelectedValueChanged(this, EventArgs.Empty); 
      } 
     } 
    } 
} 

Как вы можете видеть, Form2 не имеет никакого отношения к Form1 вообще так не нуждается знать или заботиться о том, существует ли форма 1.

+0

Где находится свойство SelectedValueChanged? –

+0

Обнаружили ошибку –

+0

"Где свойство SelectedValueChanged?": Um, я добавил комментарий к этому свойству, чтобы объяснить, что он делает. – jmcilhinney

Смежные вопросы