Sprawa wygląda tak, że mam formatkę z umieszczonym na niej tabControlem, a program ma służyć do otwierania plików. Na początku nie mam żadnych zakładek, a otwierając plik program ma dodać nowa zakładka z dataGridViewem, otwierając kolejny plik, ma się dodawać kolejna zakładka z kolejnym dataGridViewem itd. Teraz pytanie jak takie coś najlepiej zaimplementować, no i co z nazewnictwem elementów, tak żebym mógł łatwo zarządzać zakładkami i elementami na każdej z zakładek?
Z problemem tworzenia poradziłem sobie w ten sposób:
public void dodaj_zakladke(Plik plik_)
{
TabPage _zakladka = new TabPage();
_zakladka.BackColor = Color.Transparent;
_zakladka.UseVisualStyleBackColor = true;
_zakladka.Padding = new Padding(3, 3, 3, 3);
_zakladka.Text = plik_.NazwaPliku;
ListBox _lista = new ListBox();
_lista.Location = new Point(6, 10);
_lista.Size = new Size(135, _tablicaPlikow.Size.Height - 186);
_lista.DrawMode = DrawMode.OwnerDrawVariable;
_lista.FormattingEnabled = true;
_lista.ItemHeight = 17;
_lista.Items.Clear();
_zakladka.Controls.Add(_lista);
_tablicaPlikow.TabPages.Add(_zakladka);
_tablicaPlikow.SelectTab(_otwartePliki.Pliki.Count - 1);
// klasa _otwartePliki przechowuje aktualnie otwarte pliki w formie listy;
}
private delegate bool delDaneOtworz(ref string sciezka_);
private void otwórzToolStripMenuItem_Click_1(object sender, EventArgs e)
{
string sciezka_ = null;
Otworz otworz = new Otworz();
delDaneOtworz delegacja = new delDaneOtworz(otworz.pobierz_dane);
otworz.ShowDialog();
if (delegacja(ref sciezka_))
{
if (_otwartePliki.OtworzPlik(sciezka_))
{
this.dodaj_zakladke(_otwartePliki.Pliki[_otwartePliki.Pliki.Count - 1]);
}
}
}
Tylko teraz mam następujący problem. Poza funkcją dodaj_zakladke(), w której oprócz mniej więcej tego co jest, mam jeszcze przeciążone metody Click i DrawItem, nie mogę się odwoływać do konkretnych ListBoxów, czyli np. po naciśnięciu jakiegoś przycisku, mam dostęp do poszczególnych zakładek, a co za tym idzie do odpowiednich plików, ale nie mam dostępu już do ListBoxów. Po wyjściu z funkcji dodaj_zakladke() tracę do nich referencję. Moje pytanie brzmi jak to najlepiej teraz rozwiązać? W jakimś głównym zasięgu stworzyć sobie Listę typu ListBox i w niej przechowywać referencję, do poszczególnych ListBoxów z zakładek? Czy może proponujecie coś innego?
Pytanie dodatkowe :). Wywołując dodatkowe okno do otwarcia pliku (wskazanie ścieżki, itp.) w jaki inny sposób można z tego okna zwrócić wartości do głównego okna, oprócz delegacji, której użyłem? W tym okienku do ścieżki i innych danych dotyczących pliku mam metodę pobierz_dane(), która zbiera wartości z checkBoxów i textBoxa.