Отключить события при изменении свойств элемента управления в run tim - PullRequest
0 голосов
/ 31 октября 2018

Я хочу изменить свойства элемента управления на моих формах во время выполнения, используя PropertyGrid, но сначала мне нравится отключать все функциональные возможности формы (события).

Итак, я думал, что при редактировании свойств вызовите форму в каком-либо состоянии Edition, если вызовите форму с отключенными элементами управления, пользователь сможет снова включить ее (изменить сетку свойств), чтобы она не не представляется возможным решением, есть ли способ, которым я могу отключить все события, которые имеют код моих элементов управления? Или кто-нибудь может дать мне другую идею? или, если это действительно плохая идея, пожалуйста, дайте мне знать.

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Это то, что я искал ... по этой ссылке Как удалить все обработчики событий из события

публичный EventHandlerList DetachEvents (компонентный объект) {

        //**********************
        object objNew = obj.GetType().GetConstructor(new Type[] { }).Invoke(new object[] { });
        PropertyInfo propEvents = obj.GetType().GetProperty("Events", BindingFlags.NonPublic | BindingFlags.Instance);

        EventHandlerList eventHandlerList_obj = (EventHandlerList)propEvents.GetValue(obj, null);
        EventHandlerList eventHandlerList_objNew = (EventHandlerList)propEvents.GetValue(objNew, null);

        eventHandlerList_objNew.AddHandlers(eventHandlerList_obj);
        eventHandlerList_obj.Dispose();

        return eventHandlerList_objNew;
    }
0 голосов
/ 31 октября 2018

Обычно это достигается двумя способами (псевдокод)

'# 1'

public class MyForm : Form
{
    private bool _stopEvent = false;

    private void OnComboSelectedIndexChanged(sender, e)
    {
        if (_stopEvent)
            return;
        // REAL event code here
    }

    private void DoSomething()
    {
         _stopEvent = true;
         cbo.SelectedIndex = 3;
         _stopEvent = false;
    }  

    // . . .  . . .  . . .

'# 2'

    private void DoSomething()
    {
         cbo.SelectedIndexChanged -= OnComboSelectedIndexChanged;
         cbo.SelectedIndex = 3;
         cbo.SelectedIndexChanged += OnComboSelectedIndexChanged;
    } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...