Вызов метода в пользовательском управлении из одного из его модулей - PullRequest
0 голосов
/ 12 октября 2019

Я создал пользовательский пользовательский контроль, который вызывает события внутри себя во время ошибок, которые передаются любому приложению, использующему пользовательский контроль. Я хотел бы вызывать те же события из модулей в коде пользовательского элемента управления, вызывая метод внутри самого элемента управления. Пример того, что я пытаюсь сделать:

1 Ответ

1 голос
/ 13 октября 2019

Я думаю, что на этот вопрос было бы легче ответить, если бы мы точно знали, для чего нужен пользовательский контроль и почему он должен обрабатывать исключения. Но даже без этой информации существует только очень много потенциальных решений этой проблемы, в зависимости от того, как вы хотите, чтобы она работала.


Если у вас есть один конкретный экземпляр вашегоusercontrol в вашем проекте, который вы хотите вызвать событие, вам нужно иметь ссылку на этот экземпляр. Поскольку вы хотите получить доступ к этому экземпляру из Module, я бы предложил создать поле в Module для хранения этой ссылки. Вы можете добавить следующее:

Public UserControlInstance As [YourUserControlTypeHere]

Так как это будет в Module, это автоматически Shared (что, судя по вашему вопросу, является концепцией программирования, которую вы, возможно, захотитеследить за публикациями). Это позволяет ссылаться на него из любого места в проекте без использования экземпляра.

Вы можете установить UserControlInstance для экземпляра вашего usercontrol при создании этого usercontrol. Например, если ваш usercontrol является частью Window или Form, вы можете установить UserControlInstance из конструктора (Public Sub New) этого Window или Form.


С другой стороны, если вы хотите, чтобы любой и все экземпляров вашего usercontrol вызывал событие при вызове RaiseAnErrorSub, вы можете сделать как RaiseAnErrorSub, так и MyErrorEvent Shared, например, так:

Public Shared Event MyErrorEvent(Ex as Exception)

Public Shared Sub RaiseAnErrorSub(Ex as Exception)
    RaiseEvent MyErrorEvent(Ex)
End Sub

Таким образом, вы можете вызвать RaiseAnErrorSub из любой точки проекта, и все экземпляры вашего usercontrol вызовут событие (эффективно, во всяком случае).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...