• ベストアンサー

.net 次のプロシージャ 前のプロシージャ

VB6の時、Ctrl+↑ または Ctrl+↓ でプロシージャ間の移動が出来ましたが、.netだとどうすればよいですか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

#1のtodo36さんが言われるように無いと思います。 本題から外れるかもしれませんが、作る事はできます。 私も.NETを利用するようになって、大変不便さを覚え、マクロを作成しました。 ※マクロ関連のウィンドウ表示方法説明 ALT+F11:マクロIDE ALT+F8:マクロエクスプローラ でマクロ関連のウィンドウ操作ができます。 マクロエクスプローラでは、右クリックなども併用します。 ※マクロのキー割り当て ツール⇒オプション⇒環境⇒キーボード でマクロを割り当てればいいです。 私の場合は、「ALT+↑」/「ALT+↓」に割り当てています。 バグがあるとは思いますが、無いよりはマシだと思うので、個人ツールですが公開いたします。 Option Compare Binary Option Explicit On Option Strict On Imports EnvDTE Imports System.Diagnostics Public Module Module1 #Region "属性" #Region "属性_PUBLIC" #End Region #Region "属性_PPRIVATE"   Private Enum プロシージャ移動     移動_PREV     移動_NEXT   End Enum #End Region #End Region #Region "メソッド" #Region "メソッド_PUBLIC"   Public Sub PrevOfFunction()     Call 内部マクロ_モジュール移動(プロシージャ移動.移動_PREV)   End Sub   Public Sub NextOfFunction()     Call 内部マクロ_モジュール移動(プロシージャ移動.移動_NEXT)   End Sub #End Region #Region "メソッド_PRIVATE" #Region "内部マクロ_モジュール移動"   Private Sub 内部マクロ_モジュール移動(ByVal p_プロシージャ移動 As プロシージャ移動)     Dim l_col要素 As Collection     Dim l_ceコード要素 As CodeElement     Dim l_docドキュメント As Document     Dim l_tpt移動先 As TextPoint     Dim l_Index As Integer     If Not 内部マクロ_取得_コード要素(l_docドキュメント, l_col要素) Then       Exit Sub     End If     Dim l_ts選択テキスト As TextSelection = CType(l_docドキュメント.Selection, TextSelection)     Select Case p_プロシージャ移動       Case プロシージャ移動.移動_PREV         For l_Index = l_col要素.Count To 1 Step -1           l_ceコード要素 = CType(l_col要素.Item(l_Index), CodeElement)           If (l_ceコード要素.StartPoint.Line < l_ts選択テキスト.ActivePoint.Line) Then             l_tpt移動先 = l_ceコード要素.StartPoint             Exit For           End If         Next         If (l_tpt移動先 Is Nothing) Then           l_tpt移動先 = l_ts選択テキスト.Parent.StartPoint         End If       Case プロシージャ移動.移動_NEXT         For l_Index = 1 To l_col要素.Count Step 1           l_ceコード要素 = CType(l_col要素.Item(l_Index), CodeElement)           If (l_ceコード要素.StartPoint.Line > l_ts選択テキスト.ActivePoint.Line) Then             l_tpt移動先 = l_ceコード要素.StartPoint             Exit For           End If         Next         If (l_tpt移動先 Is Nothing) Then           l_tpt移動先 = l_ts選択テキスト.Parent.EndPoint         End If     End Select     l_ts選択テキスト.MoveToPoint(l_tpt移動先)   End Sub #End Region #Region "内部マクロ_取得_コード要素"   Private Function 内部マクロ_取得_コード要素( _     ByRef p_docドキュメント As Document _     , ByRef p_col要素 As Collection _   ) As Boolean     Dim l_blnRet As Boolean = False     Dim l_ces構成体 As CodeElements = Nothing     Dim l_ce構成体要素 As CodeElement = Nothing     Dim l_cdtpコード As CodeType = Nothing     Dim l_ceコード要素 As CodeElement = Nothing     Dim l_col要素 As Collection = New Collection()     If Not 内部マクロ_取得_コード構成体(p_docドキュメント, l_ces構成体) Then       GoTo PGMEND     End If     For Each l_ce構成体要素 In l_ces構成体       l_cdtpコード = CType(l_ce構成体要素, CodeType)       For Each l_ceコード要素 In l_cdtpコード.Members         l_col要素.Add(l_ceコード要素)       Next     Next     p_col要素 = l_col要素     l_blnRet = True PGMEND:     Return l_blnRet   End Function #End Region #Region "内部マクロ_取得_コード構成体"   Private Function 内部マクロ_取得_コード構成体( _      ByRef p_docドキュメント As Document _     , ByRef p_ces構成体 As CodeElements _   ) As Boolean     Dim l_fcmソース As FileCodeModel     p_ces構成体 = Nothing     p_docドキュメント = DTE.ActiveDocument     If (p_docドキュメント Is Nothing) Then       GoTo PGMEND     End If     If (p_docドキュメント.ProjectItem.FileCodeModel Is Nothing) Then       GoTo PGMEND     End If     p_ces構成体 = p_docドキュメント.ProjectItem.FileCodeModel.CodeElements PGMEND:     Return Not (p_ces構成体 Is Nothing)   End Function #End Region #End Region #End Region End Module ※ちなみに .NET標準のマクロの中に Samples.VSEditor.BeginningOfFunction というサンプルマクロがあります。 私のサンプルは、遅い処理なので、このままサンプルを利用するという手もあります。 もし改造する場合は、下のURLが参考になるかもしれません。 http://www.codeproject.com/macro/findfunction.asp?df=100&forumid=3991&exp=0&select=548105

参考URL:
http://www.codeproject.com/macro/findfunction.asp?df=100&forumid=3991&exp=0&select=548105
qui91
質問者

お礼

マクロという手があったんですね。 ありがとうございました。とても助かりました。

その他の回答 (1)

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.1

関連するQ&A