Odpinanie kontrolki od formularza

0

Witam,
chciałbym poprawić metodę klasy wirnik, tak aby usuwanie instancji z formularza (chcę aby one wizualnie i fizycznie były niszczone) było zgodne ze sztuką. Z góry zakładam że to co zrobiłem w funkcji

 
public void MakeUnvisable() {//....}

jest z nią niezgodne, lecz nic lepszego nie potrafię.
Czy możecie mi pomóc przy tym kodzie:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.VisualBasic.PowerPacks;

namespace OsiowanieTurbiny
{
    public partial class Form1 : Form
    {
        class Wirnik
        {
            LineShape sprzegloPrawe;
            LineShape sprzegloLewe;
            LineShape wal;
            public static int l = 70;
            public static int h = 10;
            ShapeContainer canvas = new ShapeContainer();

            public Wirnik(int x, int y, Form1 uchwyt)
            {
                canvas.Parent = uchwyt;
                // 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);

                sprzegloLewe.Parent = canvas;
                wal.Parent = canvas;
                sprzegloPrawe.Parent = canvas;

            }
            public void MakeUnvisable()
            {
                sprzegloLewe.Visible = false;
                sprzegloPrawe.Visible = false;
                wal.Visible = false;
            }
            ~Wirnik()
            {

            }
        }

        Stack<Wirnik> wal_wieloczlonowy = new Stack<Wirnik>();
        int curX=0, curY=100;

        public Form1()
        {
            InitializeComponent();
            // blokowanie okienka
            this.MaximumSize = this.Size;
            this.MinimumSize = this.Size;

        }

        private void zamknijAplikacjęToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            curX += (Wirnik.l + 10);
            wal_wieloczlonowy.Push(new Wirnik(curX,curY,this));
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (wal_wieloczlonowy.Count != 0)
            {
                curX -= (Wirnik.l + 10);
                wal_wieloczlonowy.Peek().MakeUnvisable(); // 
                wal_wieloczlonowy.Pop();
                
            }
            else
                MessageBox.Show("Brak wałów do usuwania ");
        }
    }
}

Dziękuję za konstruktywne uwagi.
Hubert

0

Zaimplementuj IDisposable i kod z MakeUnvisible przenieś do Dispose.
I po co Ci destruktor?

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