Przypinanie zdarzeń

0

Witam,
mam problem w temacie obsługi zdarzeń.
Mój programik działa tak, że na rzecz formy(przyciskiem) dynamicznie dodaje(do listy) własne kontrolki.
Chciałem aby zdarzenia obsługiwane były przez metodę danej instancji obiektu(kontrolki).

Chciałem także aby przypisanie zdarzenia odbywało się w konstruktorze obiektu, a nie podczas dodawania przyciskiem w metodzie formy.

Napotykam jednak błędy rodzaju:

Operator '+=' cannot be applied to operands of type 'Microsoft.VisualBasic.PowerPacks.OvalShape' and 'System.EventHandler' E:\Dropbox\Aplikacja_inzynierka\OsiowanieTurbiny\OsiowanieTurbiny\Wirnik.cs

oraz

Cannot implicitly convert type 'System.EventHandler' to 'Microsoft.VisualBasic.PowerPacks.OvalShape' E:\Dropbox\Aplikacja_inzynierka\OsiowanieTurbiny\OsiowanieTurbiny\Wirnik.cs

Gdy jednak przypisanie zdarzenia przeniosę do metody kliknięcia przycisku na formie(czego nie chcę), to wszystko działa ok.

Przypisane wygląda następująco:

this.WarstwaWizualna.wal.Click += new EventHandler(this.WczytajParametryGeometryczne);
  public void WczytajParametryGeometryczne(object sender, EventArgs e)
  • metoda klasy w której konstruktorze chciałbym przypisać zdarzenie.

Panowie co mogę robić źle? Wiem, że trudno mi odpowiedzieć ze względu na ogólność tego posta, lecz ten kod jest już całkiem spory i to dlatego starałem się jedynie opisać problem.
Klasy Form1 i ta druga są w osobnych plikach.
Dzięki za wskazówki.
Pozdrawiam
Hubert

0

Jakiego typu jest WarstwaWizualna i wal?

i gdzie jest ten OvalShape co ci w błędzie wyskakuje?

0
     
public class Wirnik
    {
        public WarstwaPrezentacji WarstwaWizualna;
        public WarstwaAplikacji WarstwaRobocza;
        FormularzWczytywaniaGeometrii WczytywanieDanych;
        int NumerWalka; // na potrzeby wczytywania geometrii

        // konstruktor
        public Wirnik(int x, int y, int numer, Form1 uchwyt)
        {
            WarstwaWizualna = new WarstwaPrezentacji(x, y, uchwyt);
            WarstwaRobocza = new WarstwaAplikacji();
            WczytywanieDanych = new FormularzWczytywaniaGeometrii(numer+1, WarstwaRobocza);
            /*
            this.WarstwaWizualna.wal.Click += new EventHandler(this.WczytajParametryGeometryczne);
            this.WarstwaWizualna.sprzegloLewe += new EventHandler(this.WczytajParametryGeometryczne);
            this.WarstwaWizualna.sprzegloPrawe += new EventHandler(this.WczytajParametryGeometryczne);
            this.WarstwaWizualna.lozyskoLewe += new EventHandler(this.WczytajParametryGeometryczne);
            this.WarstwaWizualna.lozyskoPrawe += new EventHandler(this.WczytajParametryGeometryczne);
            */
            NumerWalka = numer+1;
        }
//....
}
 
    public class WarstwaPrezentacji
    {
        public LineShape sprzegloPrawe;
        public LineShape sprzegloLewe;
        public LineShape wal;
        public OvalShape lozyskoLewe;
        public OvalShape lozyskoPrawe;

        //stałe geometrii widzianego wałka
        public static int l = 70;
        public static int h = 10;
        public static int dlLozyska = 4;
        public static int wysLozyska = 10;
        ShapeContainer canvas = new ShapeContainer();

        public WarstwaPrezentacji(int x, int y, Form1 handle)
        {
            canvas.Parent = handle;
            // Set the ShapeContainer as the parent of the LineShape.

            sprzegloLewe = new LineShape(x, y - h, x, y + h);
            sprzegloPrawe = new LineShape(x + l, y - h, x + l, y + h);
            wal = new LineShape(x, y, x + l, y);
            lozyskoLewe = new OvalShape(x + h, y, 4, 10);
            lozyskoPrawe = new OvalShape(x + l - h-dlLozyska/2, y, dlLozyska, wysLozyska);

            //pogrubienie 
            sprzegloLewe.BorderWidth++;
            sprzegloPrawe.BorderWidth++;
            wal.BorderWidth++;
            lozyskoLewe.BorderWidth++;
            lozyskoPrawe.BorderWidth++;

            //przypinanie do formy
            sprzegloLewe.Parent = canvas;
            wal.Parent = canvas;
            sprzegloPrawe.Parent = canvas;
            lozyskoLewe.Parent = canvas;
            lozyskoPrawe.Parent = canvas;

            //zapalamy wałek na czerwono, ponieważ nie ma opisanej geometrii
            ZmienKolor(Color.Red);
        }
//...
}
1
        public WarstwaPrezentacji WarstwaWizualna;
        public WarstwaAplikacji WarstwaRobocza;

Chybabym zwariował zastanawiając się, która warstwa jest którą a która którą nie jest..

this.WarstwaWizualna.sprzegloLewe += new EventHandler(this.WczytajParametryGeometryczne);

sprzegloLewe jest typu LineShape, a ty próbujesz przypisać do niego EventHandler...

0

Kurde, to z powodu małej ilości snu. Sorry za taką głupotę.

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