2010-12-14 4 views
0

私はいくつかのTextBoxをフォーカスしています(カーソルが彼に点滅しています)。 他のusercontrol(ボタンを含む)から、usercontrol上にあるボタンのいずれかを押すと、TextBoxにcharを挿入するイベントを送信します。TextBoxにcharを渡す方法は?

のTextBoxからフォーカスを失うことなく、可能にするこの必要性...(テキストボックスの上にカーソルを点滅)

私はそれをどのように行うことができますか? (キーダウンイベントを発生しようとしましたが、機能しません)

+0

テキストボックスからフォーカスを失うことなく別のボタンをクリックすることはできません。なぜあなたはこれをしたいのですか? – decyclone

+0

OK、フォーカスは主な問題ではありません:) - 私は仮想キーボードのようなボタンを使用したいです – Yanshof

+0

これは5ボタン(1,2,3,4,5)を含む仮想キーボードの一種です そしてそれぞれそれらをTextBoxにcharとして追加する必要があります。 '仮想キーボード'は、2つのテキストボックスを持つ同じウィンドウに存在するuserControlです。私はそれらの2つのテキストボックスの魔女が焦点にあることを知っている - だから私は誰に私はイベントを送信する必要があります知っている。 しかし、私はまだイベントを送信する方法を知らない... – Yanshof

答えて

1

ボタンにフォーカスを設定しないようにしましょう(Focusable = false)。

1

他のアプリケーションでこの仮想キーボードを使用したいのですか、それともあなたのアプリケーションでのみ起こっていることですか?それ以外に、あなたのアプリケーションだけの場合は、ある特定の文字、例えばTextBoxに、あるいはTextBoxに文字を挿入したいのですか?

任意のアプリケーションで動作する仮想キーボードの場合は、SendKeysのようなWin32 APIメソッドを使用します。 WinFormsusing SendKeysのための非常に簡単なインターフェイスを持っています。

TextBoxに文字を追加する必要がある場合は、のTextプロパティを変更して、イベントを発生させようとするよりも簡単に目的の動作が得られます。文字を挿入する場所を示すCaretIndexプロパティがあります。それを超えて、それは単純な文字列の連結です。

+0

しかし、問題は私がカーソルを前後に動かす必要があることと私はちょうどTextBoxのテキストを変更する場合、これは何が起こったのではないです。 – Yanshof

1
 <StackPanel> 
      <TextBox Name="MainTextBox" /> 
      <Button Content="A" 
        Focusable="False" 
        Click="Button_Click" /> 
      <Button Content="B" 
        Focusable="False" 
        Click="Button_Click" /> 
      <Button Content="C" 
        Focusable="False" 
        Click="Button_Click" /> 
      <Button Content="D" 
        Focusable="False" 
        Click="Button_Click" /> 
      <Button Content="E" 
        Focusable="False" 
        Click="Button_Click" /> 
     </StackPanel> 

コード:

1
private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     MainTextBox.Text += (sender as Button).Content.ToString(); 
    } 
var text = button.Content as string; 
textbox.SelectedText = text; 
textbox.SelectionLength = 0; // removing selection from inserted text 
textbox.SelectionStart += text.Length; 

これは、カーソル位置にボタンコンテンツを挿入(及び選択されたテキストを置き換える)であろう - ユーザと同じキーボードからの入力。 PS。 textboxが不明である場合、それは代わりに、あなたがwindowを置いてもよいFocusManager.GetFocusScope(this)

var textbox = FocusManager.GetFocusedElement(FocusManager.GetFocusScope(this)) as TextBox; 

で見つけることができます。

テキストボックスだけでなく、WinAPI関数が役立つはずです。 http://www.pinvoke.net/default.aspx/user32.sendinput

関連する問題