Я, вероятно, столкнулся с проблемой Visual Studio 2015. Если вы определяете три обработчика одного и того же события с использованием WithEvents
и Handles
ключевых слов, один из обработчиков не будет вызываться. Я проследил это поведение в нашем программном обеспечении и написал следующий образец проекта WinForms.Ошибка WithEvents в Visual Studio 2015?
Public Class MainBase1
Inherits Form
Protected WithEvents Button1 As Button
Protected TextBox1 As TextBox
Public Sub New()
SuspendLayout()
Text = "WithEvents Test"
ClientSize = New Size(300, 300)
Button1 = New Button()
Button1.Location = New Point(10, 10)
Button1.Size = New Size(100, 25)
Button1.Text = "Button1"
Controls.Add(Button1)
TextBox1 = New TextBox()
TextBox1.Location = New Point(10, 50)
TextBox1.Multiline = True
TextBox1.Size = New Size(280, 240)
Controls.Add(TextBox1)
ResumeLayout(False)
PerformLayout()
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
TextBox1.Text &= "MainBase1: Button click handled." & vbNewLine
End Sub
End Class
Public Class MainBase2
Inherits MainBase1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
TextBox1.Text &= "MainBase2: Button click handled." & vbNewLine
End Sub
End Class
Public Class Main
Inherits MainBase2
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
TextBox1.Text &= "Main: Button click handled." & vbNewLine
End Sub
End Class
После нажатия Button1
Textbox1
содержит
MainBase1: Button click handled.
Main: Button click handled.
Если я компилирую тот же образец под Visual Studio 2012, я получаю
MainBase1: Button click handled.
MainBase2: Button click handled.
Main: Button click handled.
ли кто-нибудь сталкивался с такой вопрос, а? Или я что-то пропустил?
Это еще одна ужасная ошибка Roslyn. Вы можете видеть это только, глядя на MSIL. Компилятор автоматически генерирует свойство Button1 в классе Main, у него есть массивная ошибка. Он использует MainBase1.Button1 вместо MainBase2.Button1. VS2015 Update 1 скоро появится, в настоящее время в RC. Он исправляет множество ошибок Roslyn, сначала попробуйте. Если они не исправили это, сообщите об ошибке [https://github.com/dotnet/roslyn/issues/new). –
После обновления 1 этот вопрос все еще остается. Я сообщил об этом на [GitHub] (http://github.com/dotnet/roslyn/issues/7659). – VV5198722
@ VV5198722 Я столкнулся с той же проблемой. Вы случайно нашли решение в то же время? – brovar