Zrobiłem to już wcześniej - wystarczy, że okno będzie wystarczająco duże, aby zmieścić wszystkie panele. W czasie wykonywania ukrywam wszystkie oprócz domyślnego panelu i ustawiam ich lokalizacje na równe. Dodatkowo ustawiam rozmiar okna nadrzędnego (lub kontrolnego) na taki, jaki chcę, tak aby jeden panel dobrze pasował do okna. Twoja metoda wyboru (klikanie obrazów) wydaje się być dobra, ponieważ możesz wykryć, który obraz jest kliknięty, i pokazać/ukryć odpowiednie panele.
Jest trochę niezgrabny, ale w niektórych przypadkach działa dobrze. Działa to doskonale w aplikacjach, w których chcesz wyświetlić wszystkie panele w czasie projektowania, ale wyświetlaj tylko jeden panel w czasie wykonywania. W związku z tym za pomocą wbudowanych narzędzi lokalizacyjnych Visual Studio będą nadal działać.
Oto przykładowy kod skopiowany z projektu. W rzeczywistości jest to okno Ustawienia, w którym wybieram panele do przeglądania z widoku drzewa.
Width = 640; // set the size of the form, as it's larger in Designer mode
Height = 480;
simulationPanel.Visible = false; // hide all panels, and set them to be top-left
simulationPanel.Top = 0; // relative to their parent control
simulationPanel.Left = 0;
delaysPanel.Visible = false;
delaysPanel.Top = 0;
delaysPanel.Left = 0;
occurrencesPanel.Visible = false;
occurrencesPanel.Top = 0;
occurrencesPanel.Left = 0;
languagePanel.Visible = false;
languagePanel.Top = 0;
languagePanel.Left = 0;
Następnie, aby wybrać panel, można zrobić coś jak następuje:
private void ShowPanel(string name)
{
// its easy to just hide all panels again if one is currently visible
simulationPanel.Visible = false;
delaysPanel.Visible = false;
occurrencesPanel.Visible = false;
languagePanel.Visible = false;
if (name == "language")
{
languagePanel.Visible = true;
} else if (name = "delays")
{
delaysPanel.Visible = true;
}
... etc
}
Zrobiłem coś podobnego do tego, po prostu dziedziczę z panelu dla każdej kontroli. Stworzyłem również proste rozszerzenie metody, aby wprowadzić je na wierzch, a dokowanie jest pełne, a kontrola nadrzędna jest przekazywana jako argument. – scottm