Własna kontrolka - ładowanie

0

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ę:
Przechwytywanie.PNG

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

0

**Al **proponujesz w zdarzeniu Form1_load
wykonać coś takiego:

 private void Form1_Load(object sender, EventArgs e)
        {
            userControl11.UserControl1_Load(sender, e);
        }

Oczywiście teraz po kliknięciu buttona nie wyrzuci wyjątkiem, ale combobox będzie miał wybrany element RED a nie GREEN.
Dzieje się tak dlatego, że owszem po załadowaniu Głównego okna combobox się zainicjalizuje wybierze się jego 2gi element, ale po przyciśnięciu na tabPage2, ponownie wywoływana jest funkcja public void UserControl1_Load(object sender, EventArgs e) i combobox przyjmuje pierwszy element z góry

1

Nie możesz dodać ładowania itemów w konstruktorze kontrolki ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1