Witam,
Stworzyłem sobie własną kontrolkę, jest na niej tylko combobox.
W zdarzeniu UserControl1_Load uzupełniam ten combobox wartościami (kolorami)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace telsty_linii
{
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
}
public void UserControl1_Load(object sender, EventArgs e)
{
var colors = new Dictionary<string, string>();
colors["10"] = "Red";
colors["20"] = "Blue";
colors["30"] = "Green";
colors["40"] = "Yellow";
comboBox1.DataSource = new BindingSource(colors, null);
comboBox1.DisplayMember = "Value";
comboBox1.ValueMember = "Key";
}
}
}
Mam teraz główną aplikację w której mam TabControl'a i na jego drugiej karcie mam moją stworzoną własną kontorlkę:
W zadarzeniu przy przyciśnięciu buttona wywołuję coś takiego:
private void button1_Click(object sender, EventArgs e)
{
userControl11.comboBox1.SelectedIndex = 2;
}
I teraz tak:
Jeśli odpalę aplikację, przejdę na TabPage2 i nacisnę przycisk, to wszystko jest OK,
Natomiast jeśli odpalę aplikację i nie przejdę na TabPage2, tylko od razu kliknę przycisk, to dostaję Exception :
InvalidArgument=Value of '2' is not valid for 'SelectedIndex'.
Parameter name: SelectedIndex
Dzieje się tak, ponieważ nie jest wywoływana funkcja UserControl1_Load (ona dopiero wowyłuje się po kliknięciu na TabPage2), więc jeśli nie kliknę,to ten combobox nie ma żadnych itemów i nie ma jak ustawić Indexu na 2.
Co można na to poradzić?
Chciałbym móc po prostu kliknąć buttona, a następnie po przejściu na Tabbage2 chciałbym aby w Comboboxie wybrany był element GREEN