none
検索ダイアログの「上へ検索」に勝手にチェックがつくのはなぜ? RRS feed

  • 質問

  • 検索ダイアログを開くと、「上へ検索」に勝手にチェックが付くことがありますが、なぜでしょうか?
    そして、どういう条件で付くのでしょうか?
    勝手につくので、下方向へ検索したつもりがとんでもない方向へ検索され、不便でなりません。
    チェックをつけないようにする方法はありませんか?
    2016年8月30日 5:57

回答

  • マクロのMyMacrosのEnvironmentEventsに以下のコードを貼り付けて再起動

    Option Strict Off
    Option Explicit Off
    Imports EnvDTE
    Imports System.Diagnostics
    
    Public Module EnvironmentEvents
    
    #Region "Automatically generated code, do not modify"
    'Automatically generated code, do not modify
    'Event Sources Begin
    	<System.ContextStaticAttribute()> Public WithEvents DTEEvents As EnvDTE.DTEEvents
    	<System.ContextStaticAttribute()> Public WithEvents DocumentEvents As EnvDTE.DocumentEvents
    	<System.ContextStaticAttribute()> Public WithEvents WindowEvents As EnvDTE.WindowEvents
    	<System.ContextStaticAttribute()> Public WithEvents TaskListEvents As EnvDTE.TaskListEvents
    	<System.ContextStaticAttribute()> Public WithEvents FindEvents As EnvDTE.FindEvents
    	<System.ContextStaticAttribute()> Public WithEvents OutputWindowEvents As EnvDTE.OutputWindowEvents
    	<System.ContextStaticAttribute()> Public WithEvents SelectionEvents As EnvDTE.SelectionEvents
    	<System.ContextStaticAttribute()> Public WithEvents BuildEvents As EnvDTE.BuildEvents
    	<System.ContextStaticAttribute()> Public WithEvents SolutionEvents As EnvDTE.SolutionEvents
    	<System.ContextStaticAttribute()> Public WithEvents SolutionItemsEvents As EnvDTE.ProjectItemsEvents
    	<System.ContextStaticAttribute()> Public WithEvents MiscFilesEvents As EnvDTE.ProjectItemsEvents
        <System.ContextStaticAttribute()> Public WithEvents DebuggerEvents As EnvDTE.DebuggerEvents
    
        <System.ContextStaticAttribute()> Public WithEvents CommandEvents As EnvDTE.CommandEvents
    'Event Sources End
    'End of automatically generated code
    #End Region
    
    
    
        Private Sub DTEEvents_OnStartupComplete() Handles DTEEvents.OnStartupComplete
            CommandEvents = DTE.Events.CommandEvents
        End Sub
    
        Private Sub CommandEvents_BeforeExecute(ByVal Guid As String, ByVal ID As Integer, ByVal CustomIn As Object, ByVal CustomOut As Object, ByRef CancelDefault As Boolean) Handles CommandEvents.BeforeExecute
            If (ID = 97) Then
                If (DTE.Find.Backwards) Then
                    DTE.Find.Backwards = False
                End If
            End If
        End Sub
    
    End Module


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答の候補に設定 星 睦美 2016年10月4日 9:46
    • 回答としてマーク 星 睦美 2016年10月14日 4:31
    2016年8月30日 9:35

すべての返信

  • Visual Studioのバージョンはいくつでしょうか?

    Visual Studio 2012から規定では「上へ検索」チェックボックスはなくなり、
    スプリットボタンのようなUIに変わっておりました。

    Visual Studio 2010で動作を確認したところ、「上へ検索」のチェック状態は
    前回「次を検索」で検索したときの状態を覚えているようです。

    一度「上へ検索」チェックを外した状態で「次を検索」で検索をかけると元に戻ると思うのですがいかがでしょうか?

    個人的には、検索ボックスにサーチする文字列を入れ、F3を押すと下方向の検索、Shift+F3を押すと上方向の検索ができるので使っています。(「上へ検索」チェックボックスの状態によらない)

    2016年8月30日 6:30
  • ご回答ありがとうございます。
    バージョンは2003です。
    なるほど。確かに前回の検索方向を記憶してるようですね。
    質問の「どういう条件で付くのか?」のみに限っては解決です。

    しかし前回の検索方向なんて、こっちはいちいち記憶してないので、検索ダイアログを開くたびについたりつかなかったりと定まらないのは、不便でなりません。
    検索ダイアログ開くたびに、このチェック状態を気にしなくてはならないなんて…。
    検索ボックスも、個人的には使いません。

    2016年8月30日 6:55
  • ご返信ありがとうございます。

    Visual Studio 2003ですね。すみません。こちらの環境には Visual Studio 2008 からしか入っていないため確認ができていませんが、少なくとも Visual Studio 2008 では「上へ検索」のチェック状態を覚えないようにする設定は無いようでした。

    F3、Shift+F3 は 検索ボックスだけでなく、検索ダイアログを開いた状態(検索後は閉じた状態)でも使用できると思いますがいかがでしょうか?(すみませんこちらも Visual Studio 2008 での確認です)

    2016年8月30日 8:09
  • マクロのMyMacrosのEnvironmentEventsに以下のコードを貼り付けて再起動

    Option Strict Off
    Option Explicit Off
    Imports EnvDTE
    Imports System.Diagnostics
    
    Public Module EnvironmentEvents
    
    #Region "Automatically generated code, do not modify"
    'Automatically generated code, do not modify
    'Event Sources Begin
    	<System.ContextStaticAttribute()> Public WithEvents DTEEvents As EnvDTE.DTEEvents
    	<System.ContextStaticAttribute()> Public WithEvents DocumentEvents As EnvDTE.DocumentEvents
    	<System.ContextStaticAttribute()> Public WithEvents WindowEvents As EnvDTE.WindowEvents
    	<System.ContextStaticAttribute()> Public WithEvents TaskListEvents As EnvDTE.TaskListEvents
    	<System.ContextStaticAttribute()> Public WithEvents FindEvents As EnvDTE.FindEvents
    	<System.ContextStaticAttribute()> Public WithEvents OutputWindowEvents As EnvDTE.OutputWindowEvents
    	<System.ContextStaticAttribute()> Public WithEvents SelectionEvents As EnvDTE.SelectionEvents
    	<System.ContextStaticAttribute()> Public WithEvents BuildEvents As EnvDTE.BuildEvents
    	<System.ContextStaticAttribute()> Public WithEvents SolutionEvents As EnvDTE.SolutionEvents
    	<System.ContextStaticAttribute()> Public WithEvents SolutionItemsEvents As EnvDTE.ProjectItemsEvents
    	<System.ContextStaticAttribute()> Public WithEvents MiscFilesEvents As EnvDTE.ProjectItemsEvents
        <System.ContextStaticAttribute()> Public WithEvents DebuggerEvents As EnvDTE.DebuggerEvents
    
        <System.ContextStaticAttribute()> Public WithEvents CommandEvents As EnvDTE.CommandEvents
    'Event Sources End
    'End of automatically generated code
    #End Region
    
    
    
        Private Sub DTEEvents_OnStartupComplete() Handles DTEEvents.OnStartupComplete
            CommandEvents = DTE.Events.CommandEvents
        End Sub
    
        Private Sub CommandEvents_BeforeExecute(ByVal Guid As String, ByVal ID As Integer, ByVal CustomIn As Object, ByVal CustomOut As Object, ByRef CancelDefault As Boolean) Handles CommandEvents.BeforeExecute
            If (ID = 97) Then
                If (DTE.Find.Backwards) Then
                    DTE.Find.Backwards = False
                End If
            End If
        End Sub
    
    End Module


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答の候補に設定 星 睦美 2016年10月4日 9:46
    • 回答としてマーク 星 睦美 2016年10月14日 4:31
    2016年8月30日 9:35
  • gekkaさん、ありがとうございます!どうやらうまく行きました。
    ずっと不便だな~と思いながら使い続けてたので、これでだいぶマシになりました。

    それにしても、なぜマイクロソフトがそういう仕様にしたのか、わかりました。
    「大文字と小文字の区別」や「単語単位」は、前回のチェックボックスの状態を引き継ぐ。
    その考えに倣って、検索方向も前回の方向を引き継ぐようにしたわけか。

    しかしそれなら、チェックボックスの状態を引き継ぐべきであって、F3・Shift+F3の方向を引き継ぐのは、ユーザーの使い勝手にそぐわない仕様だと思います。

    チェックボックスの状態は、「ユーザーが普段どういう使い方をしたいか?」という意図が反映される。いや、されやすい。
    一方、F3・Shift+F3の検索方向は、コロコロ変わる。次へ検索したり上へ検索したり、頻繁に替わる。そういった意味では、サイコロの目に近い。
    そこには「ユーザーが普段どういう使い方をしたいか?」という意図が反映されない。

    「デフォルト値として何が最適か?」という問題ですよ、これは。
    「ユーザーが普段検索したい方向」にすべきであって、「サイコロの目のように頻繁に替わる方向」は、デフォルト値としてはふさわしくないと思います。
    これはマイクロソフトさんの設計ミスですね。できれば改良していただきたいものです。

    ちなみに、F3・Shift+F3は、検索ダイアログを閉じた状態でやりたいんです。
    検索ダイアログ表示中は、Enterキーで検索したいんです。

    2016年8月31日 2:31