2009-02-19 3 views
4

Visual Studio и SharpDevelop не обе устанавливают делегаты для обработки событий таким же образом. Способ, которым они настроены, немного отличается. Это затрудняет использование VS в одном месте и #Devvelop в другом (в том же проекте).Visual Studio 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

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

+0

Любой способ иметь автоматическое, вместо того, чтобы делать это вручную? Я делал это раньше с помощью веб-сервисов, и он действительно сосал. – hmcclungiii

+0

Вырезать и вставить от дизайнера. – recursive

5

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

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

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

+0

Спасибо за точную информацию о реализации. – hmcclungiii

0

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

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

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

С уважением, Frank V.

4

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

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

AddHandler Me.button1.Click, AddressOf Me.OK_ButtonClick 

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

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

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

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

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

Смежные вопросы