2012-04-25 19 views
3

私はC#WinFormsで簡単なcalcベースのアプリケーションを書いています。私の問題は、ボタンがキーボードにバインドされているため、クリック/フォーカスできない結果を表示するテキストボックスがあることです。テキストボックスにはContextMenuStripが必要ですが、このアクションだけをテキストボックス内で処理する必要があります。また、このアプリケーションの要件は、フォーカス可能なコントロールを持つことができないということです。 WindowsのCalc結果ボックスのようなもの。何かアドバイス?C#:テキストボックスの選択解除とデフォーカスの方法

答えて

3

は、カスタムテキストボックスを作成します。テキストボックスはフォーカスを受け取ることはありません(実際にはフォーカスを受け取りますが、見た目は変わりません)。また、ユーザー入力を無効にする場合は、WM_CHARメッセージ(0x102)を抑制することも検討してください。

UPDATE(あなたがボタンで使用できるトリック):

public class ButtonWithoutFocus : Button 
{ 
    public ButtonWithoutFocus() 
    { 
     SetStyle(ControlStyles.Selectable, false); 
    } 
} 
0

TextBox.Enabled = falseはお客様のニーズを満たしていますか?

+0

をいいえ、私はそれが読み取り専用で、メニュー –

0

この

TextBox1.ReadOnly = True; 
+0

を表示する上で右クリックする能力を持っている必要がありますあなたはテキストボックスからテキストをコピーすることができます – Likurg

+0

これは仕事をしません - コントロールはまだフォーカスを持っています。 –

+0

フォーカスはあなたのフォーム上のいくつかのコントロールのすべての時間になるので、MyButton.Focus(); – Likurg

1

は両方TextBox.Enabled = False;TextBox1.ReadOnly = True;

+1

有効= false読み取り専用 – Likurg

2

はそれをラベルではなく、テキストボックスを作成してみてください。テキストボックスのように見えるように寸法と背景を設定でき、ContextMenuStripがあります。すべてだ

public class TextBoxWithoutFocus : TextBox 
{ 
    private const int WM_SETFOCUS = 0x7; 

    protected override void WndProc(ref Message m) 
    { 
     if (m.Msg == WM_SETFOCUS) 
      return; 

     base.WndProc(ref m); 
    } 
} 

0

単にこれを行うデフォーカス:

TextBox.Select(0, 0); 
関連する問題