سؤال

في مناقشة مجتمعية صغيرة، ما هي بعض وحدات ماكرو Visual Studio الأساسية التي تستخدمها؟

لقد بدأت للتو في التعرف عليها، وأريد أن أسمع ما لا يستطيع البعض منكم العيش بدونه.

هل كانت مفيدة؟

المحلول

واعتدت على توظيف الكثير من وحدات الماكرو في VS 2002/2003. ومن الأمثلة على ذلك إنشاء منطقة - أحب دائما دروسي إلى تقسيمها إلى المناطق التالية - "أعضاء الخاص"، "خصائص العامة"، "طرق العامة" و "أساليب خاصة". لذلك، لقد ماكرو تعيين إلى مفتاح الاختصار الذي يخلق هذه المناطق في أي ملف فئة جديدة.

وإعادة بيع ديون الدعم في VS 2005/2008 (ومرفق إضافة قصاصات رمز مشترك)، وكذلك استخدام الوظائف الإضافية مثل DXCore وSlickEdit تسمح لي للعمل دون الحاجة إلى إنشاء العديد من وحدات الماكرو بعد الآن.

نصائح أخرى

وأود أن أضيف الأزرار على شريط الأدوات وحدات الماكرو 3 التالية. كل سيستغرق النص المحدد حاليا في أي ملف، وجوجل (أو MSDN-هو، أو التدقيق الإملائي، ذلك). تشكل رمز أنيق لشريط الأدوات لإضافية نمط نقطة.

Private Const BROWSER_PATH As String = "C:\Program Files\Mozilla Firefox\firefox.exe"

Sub SearchGoogle()
    Dim cmd As String
    cmd = String.Format("{0} http://www.google.com/search?hl-en&q={1}", BROWSER_PATH, DTE.ActiveDocument.Selection.Text)
    Shell(cmd, AppWinStyle.NormalFocus)
End Sub

Sub SearchMSDN()
    Dim cmd As String
    cmd = String.Format("{0} http://www.google.com/search?hl-en&q={1}+site%3Amsdn.microsoft.com", BROWSER_PATH, DTE.ActiveDocument.Selection.Text)
    Shell(cmd, AppWinStyle.NormalFocus)
End Sub

Sub SpellCheck()
    Dim cmd As String
    cmd = String.Format("{0} http://www.spellcheck.net/cgi-bin/spell.exe?action=CHECKWORD&string={1}", BROWSER_PATH, DTE.ActiveDocument.Selection.Text)
    Shell(cmd, AppWinStyle.NormalFocus)
End Sub

إظهار مدة البناء في نافذة الإخراج

ضع هذا الكود في وحدة EnvironmentEvents الخاصة بك.سيؤدي هذا إلى كتابة المدة مباشرة في نافذة الإنشاء لأي إجراء يتعلق بالحل (الإنشاء، إعادة البناء، التنظيف، النشر).

يمكنك تغيير وظيفة IsBuild لتحديد الإجراءات التي تريد رؤية هذه المعلومات لها.

Dim buildStart As Date

Private Function IsBuild(ByVal scope As EnvDTE.vsBuildScope, ByVal action As EnvDTE.vsBuildAction) As Boolean
    Return scope = vsBuildScope.vsBuildScopeSolution
End Function

Private Sub BuildEvents_OnBuildBegin(ByVal Scope As EnvDTE.vsBuildScope, ByVal Action As EnvDTE.vsBuildAction) Handles BuildEvents.OnBuildBegin
    If (IsBuild(Scope, Action)) Then
        buildStart = Date.Now
    End If
End Sub

Private Sub BuildEvents_OnBuildDone(ByVal Scope As EnvDTE.vsBuildScope, ByVal Action As EnvDTE.vsBuildAction) Handles BuildEvents.OnBuildDone
    If (IsBuild(Scope, Action)) Then
        Dim buildTime = Date.Now - buildStart
        WriteToBuildWindow(String.Format("Build time: {0}", buildTime.ToString))
    End If
End Sub

Private Sub WriteToBuildWindow(ByVal message As String)
    Dim win As Window = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput)
    Dim ow As OutputWindow = CType(win.Object, OutputWindow)
    For Each owPane As OutputWindowPane In ow.OutputWindowPanes
        If (owPane.Name.Equals("Build")) Then
            owPane.OutputString(message)
            Exit For
        End If
    Next
End Sub

إظهار صفحة البداية بعد إغلاق الحل (مع إبقاء Visual Studio مفتوحًا)

ضع هذا الكود في وحدة EnvironmentEvents الخاصة بك:

Private Sub SolutionEvents_AfterClosing() Handles SolutionEvents.AfterClosing
    DTE.ExecuteCommand("View.StartPage")
End Sub


إخفاء صفحة البداية بعد فتح الحل

ضع هذا الكود في وحدة EnvironmentEvents الخاصة بك:

Private Sub SolutionEvents_Opened() Handles SolutionEvents.Opened
    Dim startPageGuid As String = "{387CB18D-6153-4156-9257-9AC3F9207BBE}"
    Dim startPage As EnvDTE.Window = DTE.Windows.Item(startPageGuid)
    If startPage IsNot Nothing Then startPage.Close()
End Sub


سيؤدي هذان الأمران معًا إلى إخفاء الصفحة الرئيسية الخاصة بك عند فتح أحد الحلول.عند إغلاق الحل، تعود صفحة البداية.

أستخدم الاختصارات التالية الأقل شهرة في كثير من الأحيان:

  • السيطرة + أدخل:أدخل سطرًا فارغًا أعلى السطر الحالي (وضع المؤشر هناك)
  • السيطرة + التحول + أدخل:أدخل سطرًا فارغًا أسفل السطر الحالي (وضع المؤشر هناك)
  • السيطرة + التحول + V:دورات حلقة الحافظة

الخطوط العريضة:طي التعريفات مع توسيع المناطق

هل تعمل في أحد تلك المحلات التجارية التي تصر على المناطق المحيطة بها كل شئ, ، بحيث لا تتمكن من رؤية أي رمز عند طي التعريفات؟

ما تحتاجه حقًا هو ماكرو قابل للانهيار إلى التعريفات ولكن مع توسيع المناطق، مثل هذا:

Sub CollapseToDefinitionsButExpandAllRegions()
    DTE.ExecuteCommand("Edit.CollapsetoDefinitions")
    DTE.SuppressUI = True
    Dim objSelection As TextSelection = DTE.ActiveDocument.Selection
    objSelection.StartOfDocument()
    Do While objSelection.FindText("#region", 
        vsFindOptions.vsFindOptionsMatchInHiddenText)
    Loop
    objSelection.StartOfDocument()
    DTE.SuppressUI = False
End Sub

ضع هذا في وحدة ماكرو عادية، وقم بتعيينه لمفتاح التشغيل السريع، وسيعود الرمز الخاص بك.

(باستثناء... إذا كنت تعمل مع بعض الأفراد الأشرار حقًا الذين يضعون المناطق داخل الأساليب، وهذا للأسف توسيع تلك الأساليب.إذا كان أي شخص يعرف طريقة لكتابة هذا لتجنب ذلك، فلا تتردد في التعديل.)

أدخل GUID، وهو رائع لعمل WiX، وأضفه إلى القائمة كزر أو كاختصار رئيسي.

Sub InsertGuid()
    Dim objTextSelection As TextSelection
    objTextSelection = CType(DTE.ActiveDocument.Selection(), EnvDTE.TextSelection)
    objTextSelection.Text = System.Guid.NewGuid.ToString.ToUpper(New System.Globalization.CultureInfo("en", False))
End Sub

تنظيم الاستخدامات لجميع ملفات .cs في الحل - المؤلف الأصلي: com.djpark.

Sub OrganizeSolution()
    Dim sol As Solution = DTE.Solution
    For i As Integer = 1 To sol.Projects.Count
        OrganizeProject(sol.Projects.Item(i))
    Next
End Sub

Private Sub OrganizeProject(ByVal proj As Project)
    For i As Integer = 1 To proj.ProjectItems.Count
        OrganizeProjectItem(proj.ProjectItems.Item(i))
    Next
End Sub

Private Sub OrganizeProjectItem(ByVal projectItem As ProjectItem)
    Dim fileIsOpen As Boolean = False
    If projectItem.Kind = Constants.vsProjectItemKindPhysicalFile Then
        'If this is a c# file             
        If projectItem.Name.LastIndexOf(".cs") = projectItem.Name.Length - 3 Then
            'Set flag to true if file is already open                 
            fileIsOpen = projectItem.IsOpen
            Dim window As Window = projectItem.Open(Constants.vsViewKindCode)
            window.Activate()
            projectItem.Document.DTE.ExecuteCommand("Edit.RemoveAndSort")
            'Only close the file if it was not already open                 
            If Not fileIsOpen Then
                window.Close(vsSaveChanges.vsSaveChangesYes)
            End If
        End If
    End If
    'Be sure to apply RemoveAndSort on all of the ProjectItems.         
    If Not projectItem.ProjectItems Is Nothing Then
        For i As Integer = 1 To projectItem.ProjectItems.Count
            OrganizeProjectItem(projectItem.ProjectItems.Item(i))
        Next
    End If
    'Apply RemoveAndSort on a SubProject if it exists.         
    If Not projectItem.SubProject Is Nothing Then
        OrganizeProject(projectItem.SubProject)
    End If
End Sub

طي كافة العقد من لوحة الحلول، مفيدة جدًا خاصة للمشاريع الكبيرة:

    Public Module CollapseAllNodes
    Sub RunCollapseAllNodes()
        Dim UIHSolutionExplorer As UIHierarchy
        UIHSolutionExplorer = DTE.Windows.Item(Constants.vsext_wk_SProjectWindow).Object()

        ' Check if there is any open solution 
        If (UIHSolutionExplorer.UIHierarchyItems.Count = 0) Then
            Return
        End If

        ' Get the top node (the name of the solution) 
        Dim UIHSolutionRootNode As UIHierarchyItem
        UIHSolutionRootNode = UIHSolutionExplorer.UIHierarchyItems.Item(1)

        CloseRecursif(UIHSolutionRootNode)

        ' Select the solution node, or else when you click 
        ' on the solution windows scrollbar, it will synchronize the open document 
        ' with the tree and pop out the corresponding node which is probably not 
        ' what you want. 
        UIHSolutionRootNode.Select(vsUISelectionType.vsUISelectionTypeSelect)
    End Sub

    Function CloseRecursif(ByRef element)
        For Each UIHChild In element.UIHierarchyItems()
            CloseRecursif(UIHChild)

            If (UIHChild.UIHierarchyItems.Expanded = True) Then
                UIHChild.UIHierarchyItems.Expanded = False
            End If

        Next
    End Function
End Module

وأنا استخدم جيف FormatToHtml وحدات الماكرو إذا أنا ذاهب ليكون اللصق مثال التعليمات البرمجية في بلوق وظيفة أو بريد إلكتروني.

وأنا أعمل مع الشاشات المزدوجة، وأجد ماكرو شارون تبديل تخطيط (من الشاشة 1 إلى تخطيط 2 رصد) لا تقدر بثمن تماما. عندما كنت في حاجة إلى أن الرجوع إلى صفحة ويب أو برنامج آخر أثناء الكتابة قليلا من التعليمات البرمجية، السيطرة، البديل، 1 للتبديل إلى تخطيط شاشة واحدة لديك ستوديو النوافذ البصرية. وبمجرد الانتهاء من ذلك، السيطرة، البديل، 2 للتبديل إلى تخطيط لرصد اثنين واحصل على كل ما تبذلونه من النوافذ الخلفية. رهيبة!

HTTP: / /www.invisible-city.com/sharon/2008/06/workstation-hack-visual-studio-on-2.html

وليس ماكرو من تلقاء نفسها، ولكنها مفيدة:

Public Sub WriteToOutputWindow(ByVal pane as String, ByVal Msg As String)
    Dim owPane As OutputWindowPane

    Dim win As Window = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput)
    Dim ow As OutputWindow = win.Object
    Try
        owPane = ow.OutputWindowPanes.Item(pane)
    Catch
        owPane = ow.OutputWindowPanes.Add(pane)
    End Try
    If Not owPane Is Nothing Then
        owPane.Activate()
        owPane.OutputString(Msg & vbCrLf)
    End If
End Sub

وأنا تعيينها التحول CTRL-G إلى ماكرو يقوم بإنشاء GUID في تنسيق التسجيل - وهذا هو مفيد لتحرير IDL

وأنا أعمل حاليا على مشروعين مختلفة مع معايير الترميز مختلفة، واحد يستخدم علامات لبدايات خط وآخر يستخدم مسافات. وهذا الماكرو تبديل بين المعيار الذي يستخدم على أساسها البيئة النشط حاليا:

Public Sub ToggleTabs()
  If DTE.ActiveDocument.Language = "CSharp" Then
      Dim currentSetting As Boolean = DTE.Properties("TextEditor", "CSharp").Item("InsertTabs").Value
      DTE.Properties("TextEditor", "CSharp").Item("InsertTabs").Value = Not currentSetting
  End If

  If DTE.ActiveDocument.Language = "SQL" Then
      Dim currentSQLSetting As Boolean = DTE.Properties("TextEditor", "SQL").Item("InsertTabs").Value
      DTE.Properties("TextEditor", "SQL").Item("InsertTabs").Value = Not currentSQLSetting
  End If

  If DTE.ActiveDocument.Language = "HTML" Then
      Dim currentHTMLSetting As Boolean = DTE.Properties("TextEditor", "HTML").Item("InsertTabs").Value
      DTE.Properties("TextEditor", "HTML").Item("InsertTabs").Value = Not currentHTMLSetting
  End If

  If DTE.ActiveDocument.Language = "JScript" Then
      Dim currentJScriptSetting As Boolean = DTE.Properties("TextEditor", "JScript").Item("InsertTabs").Value
      DTE.Properties("TextEditor", "JScript").Item("InsertTabs").Value = Not currentJScriptSetting
  End If

End Sub

وأنا لا يمكن أن ندع هذه المسألة يذهب دون أن يذكر <لأ href = "http://www.christophdebaene.com/blog/2006/11/21/visual-studio-net-macro-for-nesting-project- البنود / "يختلط =" noreferrer نوفولو "> هذا واحد . حتى أنه لديه شريط فيديو لإظهار كيفية تثبيت واستخدامها. هذا الماكرو ببساطة يسمح لك بإنشاء ملفات متداخلة في حل اكسبلورر (مثل resources.resx).

وتحرير: تم تحديث الرابط

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top