2011-07-19 9 views
4

クリックしたときにフォーカスを取得したくない場合や、スペースバーを再度押してもらいたい場合は、いくつかのボタンがあります。C#ボタンをクリックするとフォーカスが得られなくなる

Windowsの電卓のボタンと同じ機能が欲しいです。

グーグルで検索したスタックはすべてフォームのようです。 Make a form not focusable in C#

私は私が私がキャッチする必要がありますどのようなメッセージ/私の知る限りだとしてなど無視するように進行するかどうかは正確にわからWndProcメソッドを書き換えなくになってる知っている:

protected override void WndProc(ref Message m) 
    { 
     base.WndProc(ref m); 
    } 
+0

ボタンを正確に1回押すことができますか? – arootbeer

+0

ボタンを何度もクリックできるようにしたいが、フォーカスを得ることは望ましくない。 – StudentJ

答えて

6

あなたが行うようになったすべてのキーのClickイベントの最後に次の行を追加します

this.Focus(); 

この行は、ボタンがフォーカスを失うことになります、フォームがフォーカスを得ることができますし、スペースキーので、あなたの2つの条件を満たし、効果がありません。あなたは、代わりにこれらの2行を追加し、ボタンをもう一度クリックすることができるようにしたくない場合は

今:

this.Focus(); 
((Button)sender).Enabled = false; 

これは、他のラインがやったんだろうと加えて、それは無効になりますボタン。

+0

キーのクリックイベントですか?私が望むのは、ボタンをクリックすることですが、何回クリックしてもフォーカスを得ることができないようにすることです。窓の計算機のボタンのように。あなたがそれを動作させないボタンのクリックイベントに追加することを意味するのであれば。 – StudentJ

+0

@StudentJ - あなたがしようとしていることは分かっています。 Windows Calculator関数をエミュレートする場合は、ボタンの 'Click'イベントに' this.Focus(); 'を追加します。私を信じて、それはあなたが望むことをするでしょう。何が起きるかは 'this.Focus();'行を実行するときにフォーカスがボタンの外に出てフォームに戻ります。 – Icemanind

+1

フォーカスはまだボタン上に維持され、フォームには変わりません。まったく新しいフォームとただ1つのボタンで試してみました。 – StudentJ

15

私はこの問題を今日扱っていますが、以下は私にとって最も簡単な答えです。私はthis.Focus()を使用したくありませんでした。なぜなら、私は焦点を変えずに残す必要があったからです。

http://social.msdn.microsoft.com/Forums/windows/en-US/f1babeac-4bd9-498f-b19b-90b9fed0d751/c-stop-button-from-gaining-focus-on-click

選択することができない独自のボタンクラスを作成します。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace YourNameSpaceHere { 
    class NoSelectButton : Button{ 

     public NoSelectButton() { 

      SetStyle(ControlStyles.Selectable, false); 

     } 
    } 
} 

システムのバージョンではなく、NoSelectButtonで設計ファイルを更新してください。インスタンスごとに2つの場所に配置する必要があります。

Nb:Visual Studioデザイナーは、[開始]を押すまで、一時的にプレビューを解除することがあります。

+1

これは 'PerformClick()'がイベントの発生を停止するという副作用があります。しかし、これは回避することができます:http://stackoverflow.com/questions/16951142/performclick-on-custom-button-will-not-work/31467870#31467870 – Loathing

1

コメントに記載されているように、これを行う最も簡単な方法は、何もしない(イベントハンドラを持たない)フォームに入力コントロールを追加し、ボタンのOnClickメソッドでControl.Focus()を使用することです。ただし、ダミーコントロールのVisibleプロパティをfalseに設定すると、これは機能しません。

私の解決策はダミーボタンを追加し、そのサイズを0、0に設定し、その都度フォーカスを設定することでした。私はあなたが何かの背後にあるか、サイズ変更不可能なフォームやパネルの枠の外にコントロールを置くこともできると思います。

関連する問題