Visual Studio vs. #Develop - обработчики событий по умолчанию - PullRequest
4 голосов
/ 19 февраля 2009

Visual Studio и SharpDevelop не настраивают делегатов для одинаковой обработки событий. То, как они настроены, немного отличается. Это затрудняет использование VS в одном месте и #Develop в другом (в том же проекте).

Например, в VB Visual Studio делает следующее:

Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click
    Me.DialogResult = System.Windows.Forms.DialogResult.OK
    Me.Close()
End Sub

И ...

Friend WithEvents OK_Button As System.Windows.Forms.Button

Так что элемент управления объявлен не только с другой областью действия (это может быть проблемой также, но не с темой этого поста), но и с остроумием. Затем обработчик события назначается ему предложением handles.

в #Develop, это делается так ...

Sub OK_ButtonClick(sender As Object, e As EventArgs)

End Sub

и ...

Private button1 As System.Windows.Forms.Button

Затем в методе InitializeComponent

AddHandler Me.button1.Click, AddressOf Me.OK_ButtonClick

Самая досадная вещь в этом - даже если это делается в одну сторону, другая идея переделает это, имея двойные объявления и, конечно, ошибки времени компиляции.

Кто-нибудь знает способ обойти это, каким-то образом настроить обработчики по умолчанию? даже если их можно отключить, просто набрать их вручную?

Ответы [ 4 ]

5 голосов
/ 01 марта 2009

Sharpdevelop выпускается под лицензией LGPL, поэтому вы всегда можете получить исходный код и внести любые необходимые изменения.

Для внесения необходимых изменений вам может потребоваться изменить или переопределить методы InsertComponentEvent и CreateEventHandler в классе VBNetDesignerGenerator. Это в проекте FormsDesigner.

Вы можете получить источник здесь .

4 голосов
/ 03 марта 2009

Хотя я не из тех, кто обычно соглашается с людьми, которые говорят, что «этот проект с открытым исходным кодом, измените кодовую базу самостоятельно», это один из случаев, когда он может быть правильным ответом.

Причина, по которой #develop делает все так, как он делает, заключается в том, что это прямой порт того, как C # добавляет обработчики событий, например,

AddHandler Me.button1.Click, AddressOf Me.OK_ButtonClick

- это просто прямой перевод:

this.button1.Click += new EventHandler(OK_ButtonClick);

Если вы использовали C #, Visual Studio и #Develop будут обрабатывать создание событий в коде точно так же.

Очевидно, что никто не участвует в общем случае использования Visual Basic в #Develop, и, как я сказал выше, это один из тех крайних случаев, когда вам просто может понадобиться настроить код самостоятельно или, возможно, даже внести свой вклад в # Разработать исходный код для этого конкретного случая.

Я уверен, что все остальные, кто использует #Develop для Visual Basic, оценят это.

4 голосов
/ 19 февраля 2009

возьмите их из .designer и соедините их вручную в конструкторе в коде позади. .designer регенерируется дизайнером любого используемого вами инструмента

0 голосов
/ 03 марта 2009

Это не самое практичное предложение, но я обещаю, что оно выполнит работу за вас.

# Разработка с открытым исходным кодом. Таким образом, теоретически вы можете изменить кодовую базу таким же образом, что и Visual Studio.net ... Я не уверен, насколько это может быть связано, но я решил поделиться своей идеей ...

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

С уважением, Фрэнк В.

...