Одно раздражение с использованием с - то, что отладчик не может обработать его. Таким образом, это делает отладку более трудной.
А большая проблема состоит в том, что менее легко прочитать код. Особенно, если с оператором немного длиннее.
procedure TMyForm.ButtonClick(...)
begin
with OtherForm do begin
Left := 10;
Top := 20;
CallThisFunction;
end;
end;
, Которым назовут CallThisFunction Формы? Сам (TMyForm) или OtherForm? Вы не можете знать, не проверяя, имеет ли OtherForm метод CallThisFunction.
И самая большая проблема то, что можно сделать ошибки легкими, даже не зная это. Что, если и TMyForm и OtherForm имеют CallThisFunction, но это является частным. Вы могли бы ожидать/хотеть OtherForm. CallThisFunction, который назовут, но это действительно не. Компилятор предупредил бы Вас, если Вы не использовали с, но теперь он не делает.
Используя несколько объектов в с умножает проблемы. См. http://blog.marcocantu.com/blog/with_harmful.html
Вот еще одна версия (на основе ответа Алекса), которая также выберет текущее слово, на котором вы находитесь. Больше похоже на типичную справку F1.
Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports System.Diagnostics
Public Module Search
Sub GoogleSearch()
AnySearch("http://www.google.com/search?q=.net+")
End Sub
Sub BingSearch()
AnySearch("http://www.bing.com/search?q=")
End Sub
Private Sub AnySearch(ByVal searchUrl)
Dim strUrl As String
Dim selection As String = GetSelection()
If selection <> "" Then
strUrl = searchUrl + selection
DTE.ExecuteCommand("nav", strUrl & " /ext")
Else
MsgBox("Select text to search for.")
End If
End Sub
Private Function GetSelection() As String
Dim selection As TextSelection = DTE.ActiveDocument.Selection()
If selection.Text <> "" Then
Return selection.Text
Else
DTE.ExecuteCommand("Edit.SelectCurrentWord")
selection = DTE.ActiveDocument.Selection()
Return selection.Text
End If
End Function
End Module
Используя ссылку Предоставленный Preet , я придумал, что запускает браузер по умолчанию:
Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports System.Diagnostics
Public Module Search
Sub GoogleSearch()
AnySearch("http://www.google.com/search?q=")
End Sub
Sub BingSearch()
AnySearch("http://www.bing.com/search?q=")
End Sub
Private Sub AnySearch(ByVal searchUrl)
Dim strUrl As String
Dim selection As TextSelection = DTE.ActiveDocument.Selection()
If selection.Text <> "" Then
strUrl = searchUrl + selection.Text
DTE.ExecuteCommand("nav", strUrl & " /ext")
Else
MsgBox("Select text to search for.")
End If
End Sub
End Module