Ich bin diesbezüglich vielleicht ein bisschen eigen, aber ich mag das Fenster Error List in Visual Studio nicht besonders: Die Art und Weise, wie da während dem Tippen von Code andauernd die Fehler auftauchen und wieder verschwinden, stört mich irgendwie und lenkt mich ab.
Ich habe mir deshalb das folgende Makro programmiert, mit dessen Hilfe ich den Cursor von Fehler zu Fehler navigieren kann, wobei der Fehlertext gleich im Statusbereich angezeigt wird. Das ist nicht nur bequemer, als einen Fehler um den anderen in der Error List anzuklicken, sondern ermöglicht mir eben auch, die Error List im Normalfall geschlossen zu halten, womit sich das Problem mit der Ablenkung erledigt hat.
Ich habe hierzu ein Icon in Visual Studio konfiguriert, welches das Makro GoToNextError aufruft.
Eine kleine Schwierigkeit, die sich beim Implementieren des Makros ergab und die noch auf eine elegantere Lösung wartet als jetzt programmiert: Das Makro muss irgendwie merken, dass neu kompiliert wurde, um mit dem Durchgehen der Fehler wieder von vorne beginnen zu können, gesteuert durch die Variable currentError. (Natürlich könnte man ein kleines zweites Makro mit einem zweiten Icon bauen, um von vorne zu beginnen, aber wenn es automatisch geht, ist das bequemer.)
Hierzu wird eine Art “Hashcode” über die Liste aller Fehler gebildet, und wenn diese ändert, nimmt man an, dass neu compiliert wurde.
Ich war usprünglich skeptisch, ob sich die Einarbeitung in die Visual-Studio-Makro-Programmierung wirklich lohnt, und war auch ein bisschen abgeschreckt durch Visual Basic statt C# als Makro-Sprache und die seltsamen “DTE”-Objekte, aber diese Skepsis hat sich gelegt. Und schliesslich gibt es auch bei einem so ausgereiften Werkzeug wie der Visual-Studio-IDE immer mal wieder etwas zu verbessern, vor allem, wenn die eigene Arbeitsweise etwas ausserhalb des “Mainstream” liegt…
Option Strict Off
Option Explicit On
Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports System.Diagnostics
Public Module BrMacros
Private hashCode As Integer
Private errList As ErrorList
Private currentError As Integer
Private Function ErrorListHashCode() As Integer
' Detektiere heuristischerweise eine NEUE Error-Liste nach Kompilation an Hand einer Art Hashcode
Dim h As Integer
Dim i As Long
Dim errItem As ErrorItem
For i = 1 To errList.ErrorItems.Count
errItem = errList.ErrorItems.Item(i)
If Not (errItem.FileName Is Nothing) Then
h = h + errItem.Line + errItem.Column
End If
Next
ErrorListHashCode = h
End Function
Private Function ErrorCount() As Integer
Dim n As Integer
Dim i As Long
Dim errItem As ErrorItem
n = 0
For i = 1 To errList.ErrorItems.Count
errItem = errList.ErrorItems.Item(i)
If errItem.ErrorLevel = vsBuildErrorLevel.vsBuildErrorLevelHigh Then
n = n + 1
End If
Next
ErrorCount = n
End Function
Public Sub GoToNextError()
errList = DTE.ToolWindows.ErrorList
If ErrorCount() = 0 Then
Exit Sub
End If
Dim h As Integer
h = ErrorListHashCode()
If h <> hashCode Then
hashCode = h
currentError = 1
End If
Dim numErrors = errList.ErrorItems.Count
Dim errItem As ErrorItem
Do
If currentError > numErrors Then
currentError = 1 ' Cycle
End If
errItem = errList.ErrorItems.Item(currentError)
currentError = currentError + 1
If errItem.ErrorLevel = vsBuildErrorLevel.vsBuildErrorLevelHigh Then
errItem.Navigate()
DTE.StatusBar.Text = errItem.Description
Exit Sub
End If
Loop
End Sub
End Module