none
F10やF11キーによるデバッグの実行を無効にするには? RRS feed

  • 質問

  • デバッグ中に、F10、F11によるステップイン、ステップオーバーはできてほしいですが、
    コーディング中はF10、F11キーを無効にしたいのです。ついうっかり押してしまうことがあるので…。
    何か方法はありますでしょうか?

    VS2015です。

    2020年8月4日 7:36

すべての返信

  • こまってますさん、こんにちは。フォーラムオペレーターのKumoです。
    MSDNフォーラムにご投稿くださいましてありがとうございます。

    こちらのリンクが参考になるかもしれません。
    WinformでF10キーを無効にしたい場合、以下のコードをご参照ください。
    Private Sub form_KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs) 
        If e.KeyData = Keys.F10 Then
            e.SuppressKeyPress = True
        End If
    End Sub
    

    どうぞよろしくお願いいたします。 

    MSDN/ TechNet Community Support Kumo ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    2020年8月5日 5:20
    モデレータ
  • kumo-msft さま 

    書き込まれた内容は 作成している Project に対するもので、ご質問内容には沿っていません。

    ご質問は Visual Studio IDE そのものの挙動の様ですので。 元来、Microsoft のコードを弄る事は禁止されている筈ですし、Form を使って書かれているとは、到底、思えませんし。

    2020年8月5日 13:04
  • VisualStudioの拡張機能を作るだけなんですけど、VS2015までとVS2017以降ではパッケージのつくりが変わるので・・・

    以下のは2017以降用のコード。2015では非同期処理の部分を消せばいいです。

    Imports System
    Imports System.Runtime.InteropServices
    Imports System.Threading
    Imports Microsoft.VisualStudio
    Imports Microsoft.VisualStudio.Shell
    Imports Task = System.Threading.Tasks.Task
    
    <PackageRegistration(UseManagedResourcesOnly:=True, AllowsBackgroundLoading:=True)>
    <InstalledProductRegistration("#110", "#112", "1.0", IconResourceID:=400)>
    <ProvideAutoLoad(VSConstants.UICONTEXT.NoSolution_string, PackageAutoLoadFlags.BackgroundLoad)>
    <ProvideAutoLoad(VSConstants.UICONTEXT.EmptySolution_string, PackageAutoLoadFlags.BackgroundLoad)>
    <ProvideAutoLoad(VSConstants.UICONTEXT.SolutionExists_string, PackageAutoLoadFlags.BackgroundLoad)>
    <Guid(VSPackage1.PackageGuidString)>
    Public NotInheritable Class VSPackage1
        Inherits AsyncPackage
    
        Public Const PackageGuidString As String = "89b63b71-6712-4494-ab51-086f0e998323"
    
        Public Sub New()
        End Sub
    
        Private dte As EnvDTE.DTE
        Private cev As EnvDTE.CommandEvents
        Private STEPOVER_GUID As String
        Private STEPOVER_ID As String
        Private STEPINTO_GUID As String
        Private STEPINTO_ID As String
    
        Protected Overrides Async Function InitializeAsync(cancellationToken As CancellationToken, progress As IProgress(Of ServiceProgressData)) As Task
            Await Me.JoinableTaskFactory.SwitchToMainThreadAsync()
            Try
                dte = CType(GetService(GetType(EnvDTE.DTE)), EnvDTE.DTE)
    
                Dim cmd As EnvDTE.Command
                cmd = dte.Commands.Item("Debug.StepOver")
                STEPOVER_GUID = cmd.Guid
                STEPOVER_ID = cmd.ID
    
                cmd = dte.Commands.Item("Debug.StepInto")
                STEPINTO_GUID = cmd.Guid
                STEPINTO_ID = cmd.ID
    
                cev = dte.Events.CommandEvents
                AddHandler cev.BeforeExecute, AddressOf CommandEvents_BeforeExecuteEventHandler
            Catch
            End Try
        End Function
    
        Public Sub CommandEvents_BeforeExecuteEventHandler(Guid As String, ID As Integer, CustomIn As Object, CustomOut As Object, ByRef CancelDefault As Boolean)
            If dte.Debugger.CurrentMode <> EnvDTE.dbgDebugMode.dbgDesignMode Then
                Return
            End If
    
            If (Guid = STEPINTO_GUID AndAlso ID = STEPINTO_ID) OrElse (Guid = STEPOVER_GUID AndAlso ID = STEPOVER_ID) Then
                CancelDefault = True
            End If
        End Sub
    End Class
    #キーボードの割り当てでステップイン/オーバーのを間違えにくいキーにするのが一番簡単だと思う

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

    • 編集済み gekkaMVP 2020年8月5日 16:10
    • 回答の候補に設定 ShiroYuki_Mot 2020年8月6日 2:38
    2020年8月5日 16:08
  • gekka さま いつもお世話になっております。

    そうか、VisualStudio の拡張機能 作成と言う方法があったのですね。 とても、参考になりました。

    2020年8月6日 2:37
  • gekka様

    初歩的な質問ですみません。このコードはどこに記述すればよいのでしょうか?
    マクロのMyMacrosのEnvironmentEventsに貼り付けて再起動すればいいのでしょうか?

    それと「非同期処理の部分」とはどこでしょうか?

    2020年8月7日 3:41
  • こまってますさん、こんにちは。フォーラムオペレーターのKumoです。
    ご返信いただきありがとうございます。

    Visual Studioに「Tweaks」という拡張機能をダウンロードし、インストールしてください。
    この拡張はVisual studio editorでコーディング中にF11とF10キーを無効にします。

    どうぞよろしくお願いいたします。 

    MSDN/ TechNet Community Support Kumo ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    2020年8月7日 9:06
    モデレータ
  • 残念ながら、Tweaks は Works With VS2019 なので、質問者さんの VS2015 をケアできていませんね。

    質問者さんへ。
    gekka さんの言う「拡張機能」およびサンプルは、Visual Studio SDK をインストールし、Visual Studio を拡張するプラグイン・アドイン的なものを作ることであって、マクロではありません。
    拡張機能の作り方については検索して学んでください。

    それが難しいようなら、提案があったように、VS2019 に移行して、Tweaks という拡張機能をインストールするのが一番楽だと思います。

    2020年8月7日 9:54
    モデレータ
  • 勉強しないとならないのですか…
    そこまでしなくてもできるものを期待していました…
    2020年8月11日 2:37
  • 実はF10、F11と同じぐらい困っているのが、F4キー(プロパティウィンドゥ表示)です。
    コーディング中はウィンドゥをめいっぱい使いたいのでプロパティウィンドゥを非表示にしてるのですが、F3(検索)と間違ってうっかり押してしまうことがあるので…。
    表示するのはいいけど、もう一度押したら表示をOffにしてもらいたいです。いちいち×ボタンで閉じるのはなにげに面倒…。
    これも勉強しないと難しいでしょうか…?
    2020年8月11日 4:16
  • 本質的にはよく使うショートカットキーとそうでないものが隣り合っていることが課題なのでしょうから、オブションのキーボードの設定の変更を考えるところかと思います。

    全く使わないなら割り当てを外したらよいですし、特定のウィンドウだけできくようにしたいならそのように設定を変えるところでしょうか。

    このときだけは聞いてほしい、聞かないでほしいという細かなことは拡張機能を自作するか、運良く他者が公開してくれているかでしょう。(あるいは、誰かに作ってもらって報酬を払うか)

    2020年8月11日 4:35
    モデレータ
  • 補足しますと、
    F3のときにF4を押してしまうのはよくあるけど、
    F9のときにF10を押してしまうのはあまりないんですよ。端っこのキーのほうが押しやすいから。
    ではなぜF10を押してしまうかというと、
    全角入力モードの時に半角で確定するためにF10をよく押すんです。
    半角入力モードの時にもそれをついやってしまうことがあるので…。
    コンパイルが始まってしまい、ロスな時間が発生するので、けっこうストレスなんですよね…。
    「あーーーーーまた押しちまったよーーーー!」てな感じで…orz
    2020年8月11日 23:43
  • 私は基本的に IME OFF 状態を常にして、日本語入力を終えたらすぐ IME OFF にするので「全角入力モードの時に半角に変換する」シーンがないですね…。
    これは人それぞれのスタイルなのでなんとも言えませんが、IME ON 状態だと Alt → F → S みたいな、アクセスキー操作が効かない経験もあるので、癖づけてきている話ではあります。

    お困りなのはわかりますが、コミュニティは無償の仕事を請け負う場ではないので、せっかく作ってくれたサンプルを活かすも殺すもあなた次第かと思います。
    諦めるなら諦めましょう。諦められないなら自助努力で頑張りましょう。
    ( ロスな時間 > 勉強する時間なら勉強した方が効率いいですし、その逆なら受容したら良い話かと思います)

    現時点での選択肢

    • 諦める
    • Visual Studio や IME のキー設定を変更する
    • Visual Studio 2019 に移行して、Tweaks という拡張機能を導入する
    • Visual Studio SDK を導入し、拡張機能の基礎を学んで gekka さんのサンプルを活用する
    • 業者など、作ってくれる誰かを頼る(基本的に有償の行為です)

    繰り返しになってしまいますが、個人的にはこのスレッドで、「そのうち誰かが助けてくれる」という感じで続けないで欲しいです。
    改善すべき課題を自分の工夫によって改善するのがプログラマーのあるべきだと思いますし、コミュニティで騒いでたら有償のはずのことを無償でやってくれるなんて風土ができても困るので…。

    2020年8月11日 23:49
    モデレータ
  • いや、別に…もうここまでくれば期待はしてないですよ。
    まぁ愚痴っぽい独り言になっちゃいましたけどね。
    現状でもじゅうぶん困っているのですが、しっかりと勉強するほどの余裕も今はないので、しばらくはこのまま使い続けるとします。
    どうしても困ったらツールでも探すかも。

    解決には至りませんでしたが面白いものが見れてよかったです。
    皆さんどうもありがとうございました。

    2020年8月12日 1:25