Ja od dziś rana napisałem tyle kodu, że mi się literki z klawiszy już ścierają. Niestety wszystko źle. Nie wpisywałem tu swoich funkcji wczytujących obrazek po kliknięciu, żeby sobie obciachu nie robić :)
Ale fakt - o umieszczeniu referencji w konstruktorze nie pomyślałem. Niestety wszystkie próby wstawienia referencji w obsłudze przycisku wywalały błędy. Nawet w obsłudze rodzica przesłanie danej z jednego dziecka do drugiego nie chciało mi działać.
Tu jest solucja, w której jest panel z przyciskami i panel w obiektem pictureBox. Dodatkowo w rodzicu jest menu, a w nim File/Open, która.. działa prawidłowo (wczytuje obrazek i go umieszcza w panelu - dziecku). Z poziomu rodzica wszystko działa prawidłowo, a przesyłanie między panelami równorzędnymi już nie. I to właśnie mój problem.
Kodu własnego nie wstawiałem, bo nawet nie wiem, od czego zacząć. Wszystko, co próbowałem po prostu nie działało. Niestety za 3 minuty wychodzę do pracy, więc teraz już nie wypiszę listy błędów, jakie mi się pokazywały :)
No więc tak... Obiekt klasy zawierającej przyciski nazywa się "okno1", a klasy zawierającej
pictureBox nazywa się "okno2".
W klasie zawierającej obiekt pictureBox1 wstawiam kod:
public void zmienObraz(String nazwaObrazu)
{
pictureBox1.Image = Image.FromFile(nazwaObrazu);
}
A w klasie zawierającej przycisk wstawiam:
private void button1_Click(object sender, EventArgs e)
{
okno2.zmienObraz("ścieżka_do_obrazka/nazwa/obrazka"); //okno2 to jest obiekt - panel zawierający "pictureBox1".
}
Kiedy próbuję to wywołać, otrzymuję błąd:
"The name 'okno2' does not exist in the current context".
Dokładnie wiem, co to oznacza. Ale za diabła nie mogę sobie z tym poradzić. Żeby w "okno1" było widać "okno2". Wstawiałem ref-a gdzie tylko udało mi się wymyśleć, ale zawsze dawało to błędy, albo po prostu nie działało.
W klasie nadrzędnej (czyli w Form1) mam toolStripMenu, i metody:
private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
openFileDialog1.Filter = "jpg files (*.jpg)|*.jpg|Gif files (*.gif)|*.gif|All files (*.*)|*.*";
openFileDialog1.ShowDialog();
}
private void openFileDialog1_FileOk(object sender, CancelEventArgs e)
{
okno2.zmienObraz(openFileDialog1.FileName);
}
I to mi działa bez zarzutu.
BYĆ MOŻE w samym DockpanelSuite są odpowiednie mechanizmy do tego. Ale biblioteka ta właściwie w ogóle nie jest udokumentowana. Na każde pytanie o dokumentację dostaje się odpowiedź "Zajrzyj do załączonego przykładu". Tyle, że w przykładzie są tylko wyświetlone różne panele, a nie ma w ogóle żadnych akcji.