Witam.
Mam Formę, w niej Panel. Na panelu kliknięciami myszy rysuje kontrolki typów BlokT1 i BlokT2 (oba dziedziczone z abstrakcyjnej klasy Blok, a ta z Control), te rysują się poprawnie. Drugi typ kontrolek Wire ma za zadanie być linią łączącą dwa wybrane bloki (klikam na odpowiedni button na innym panelu, potem na pierwszą kontrolkę, potem na drugą). W klasie Form1 mam funkcje
public void AddNewWire()
{
//NewWire to pole klasy o typie Wire
if (NewWire == null) return;
drawPanel.Controls.Add(NewWire); //drawPanel - panel na ktorym rysowane sa kontrolki, pole klasy
NewWire.BringToFront();
NewWire.Invalidate();
creatingWireState = false;
creatingWire = false;
}
public void CreateWire(Blok start, Blok end)
{
NewWire = new Wire(new Point(start.Location.X + start.Width/2, start.Location.Y + start.Height/2), new Point(end.Location.X + end.Width/2, end.Location.Y + end.Height/2));
AddNewWire();
}
CreateWire tworzy nowe połącznie, AddNewWire dodaje połączenie do listy kontrolek panelu.
Metoda obsługująca kliknięcia obiektów klasy Blok:
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
Form1 parentForm = this.FindForm() as Form1;
if (parentForm != null && parentForm.creatingWire)
{
if (!parentForm.creatingWireState) //creatingWireState mowi o tym, czy blok ma byc poczatkiem czy koncem polaczenia
{
if (this.CanAddWireOut())
{
parentForm.tempBlok = this;
parentForm.creatingWireState = true;
}
}
else
{
if (this.CanAddWireIn() && parentForm.tempBlok != this)
{
parentForm.CreateWire(parentForm.tempBlok, this);
}
}
}
}
Tak napisany kod nie powoduje wyświetlenia się kontrolki. Po drugim kliknięciu wywoływane są wszystkie funkcje, ale kontrolki nie widać(jest na liście kontrolek panelu) i nie wywołuje się jej funkcja odpowiedzialna za rysowanie (dodawana w konstruktorze kontrolki do eventu Paint).
Jednak po wykonaniu takiego kodu:
BlokT1 s = new BlokT1(10, 10, 60, 70);//pozycja x, pozycja y, szerokosc, wysokosc
BlokT2 e = new BlokT2(100, 100, 20, 30);
Form1 f = this.FindForm() as Form1;
f.CreateWire(s, e);
Kontrolka pokazuje się i funkcja odpowiedzialna za rysowanie jest wywoływana. Co jest przyczyną takiego zachowania?