SORU
18 EYLÜL 2008, PERŞEMBE


Nasıl işleyicileri bir denetimi tüm olay çıkarmak için

Bir denetimde yeni bir olay işleyicisi oluşturmak için bunu yapın

c.Click  = new EventHandler(mainFormButton_Click);

ya bu

c.Click  = mainFormButton_Click;

ve bu yapabileceğiniz bir olay işleyicisi kaldırmak için

c.Click -= mainFormButton_Click;

Ama nasıl işleyicileri bir denetimi tüm olay kaldırılsın mı?

CEVAP
18 EYLÜL 2008, PERŞEMBE


MSDN forums Bu bir çözüm buldum. Aşağıdaki örnek kodu button1 Click tüm olayları kaldırır.

public partial class Form1 : Form
{
        public Form1()
        {
            InitializeComponent();

            button1.Click  = button1_Click;
            button1.Click  = button1_Click2;
            button2.Click  = button2_Click;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Hello");
        }

        private void button1_Click2(object sender, EventArgs e)
        {
            MessageBox.Show("World");
        }

        private void button2_Click(object sender, EventArgs e)
        {
            RemoveClickEvent(button1);
        }

        private void RemoveClickEvent(Button b)
        {
            FieldInfo f1 = typeof(Control).GetField("EventClick", 
                BindingFlags.Static | BindingFlags.NonPublic);
            object obj = f1.GetValue(b);
            PropertyInfo pi = b.GetType().GetProperty("Events",  
                BindingFlags.NonPublic | BindingFlags.Instance);
            EventHandlerList list = (EventHandlerList)pi.GetValue(b, null);
            list.RemoveHandler(obj, list[obj]);
        }
    }
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ama Jenna

    Ama Jenna

    29 NİSAN 2011
  • ChasesAndCrashes

    ChasesAndCra

    31 Temmuz 2009
  • MADFINGER Games a.s.

    MADFINGER Ga

    21 NİSAN 2009