Генерирование событий внешнего объекта в C#

Использование React и node.js может стать более безопасным решением для будущего, поскольку оно стало отраслевым стандартом ... вы уже смотрели: https://www.npmjs.com/package/react-jsonschema-form [ 110]

Это выглядит довольно солидным репо с точки зрения еженедельных загрузок и, кажется, хорошо подходит для вашего случая использования (я могу попробовать это сам). Единственным уловом было бы то, что есть кривая обучения, чтобы освоиться с миром React и nodejs. Я очень рекомендую это, хотя, если вы еще этого не сделали. Некоторые большие ресурсы, чтобы начать, могли бы включать:

Оттуда это может стать глубоким погружение, но я нахожу это забавным Удачи!

7
задан Mehrdad Afshari 26 April 2009 в 07:57
поделиться

5 ответов

Невозможно вызвать событие C # непосредственно из другого класса (даже если это public ). Вы можете предоставить метод (с достаточным модификатором доступа), который вызывает событие от вашего имени, и вызвать этот метод в другом классе .

Кстати, это возможно с отражением, но я считаю, что это грязный взлом.

9
ответ дан 6 December 2019 в 10:03
поделиться

Большинство типов в CLR, которое вызывает события, имеет защищенный метод On [EventName], который заботится о возникновении события. Вы можете вызвать этот защищенный метод «извне», используя Reflection:

 Control parent = ((Control)sender).Parent;
 Type parentType = parent.GetType();
 MethodInfo onClickMethod = parentType.GetMethod("OnClick", BindingFlags.Instance | BindingFlags.NonPublic);

 onClickMethod.Invoke(parent, new object[] { e });
6
ответ дан 6 December 2019 в 10:03
поделиться

В зависимости от того, какую платформу вы используете, возможно, вам не нужно вручную вызывать событие click для родителя, WPF и ASP.NET например, всплывающие события вверх по дереву элементов.

Если это не вариант, вы можете делать то, что предлагает Мехрдад.

1
ответ дан 6 December 2019 в 10:03
поделиться

Единственная причина, по которой я могу подумать, почему вы захотите вызвать событие Click, - это если вы имитируете пользовательский ввод. Вы работаете над автоматизированным тестовым драйвером или чем-то в этом роде? Если это так, то могут быть лучшие решения, чем использование кода с помощью вспомогательных методов только для тестирования. Этот появляется первым в Google, я понятия не имею, хорошо ли это.

Если вы пытаетесь сделать это как своего рода управление потоком в самом приложении, я бы сделал шаг вернемся, чтобы понять, правильно ли это делать - это вроде "плохо пахнет".

1
ответ дан 6 December 2019 в 10:03
поделиться

Я реализовал это, используя методы отражения и расширения, так что я могу просто вызвать (в данном случае) событие щелчка LinkLabel, просто вызвав:

var link = new LinkLabel()'
link.Text = "Some link";
link.click();

щелчок () - это метод расширения C #:

    public static void click(this LinkLabel linkLabel)
{
    var e = new LinkLabelLinkClickedEventArgs((LinkLabel.Link)(linkLabel.prop("FocusLink")));
    linkLabel.invoke("OnLinkClicked", e);
}

, который использует другие методы расширения, чтобы:

  • получить частное свойство из LinkLabel (необходимо для создания объекта LinkLabelLinkClickedEventArgs)
  • вызвать метод OnLinkClicked (который запустит событие
2
ответ дан 6 December 2019 в 10:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: