Как через char в TextBox? - PullRequest
       2

Как через char в TextBox?

0 голосов
/ 14 декабря 2010

У меня есть какой-то текстовый блок в фокусе (на нем мигает курсор). Теперь из другого пользовательского элемента управления (содержащего кнопки) я хочу отправить событие, которое вставит символ в TextBox при нажатии любой из кнопок пользовательского элемента управления.

Это должно быть без потери фокуса от TextBox ... (мигающий курсор на TextBox)

Как я могу это сделать? (я пытаюсь поднять событие нажатия клавиши - но это не работает)

Ответы [ 4 ]

1 голос
/ 16 декабря 2010
var text = button.Content as string;
textbox.SelectedText = text;
textbox.SelectionLength = 0;    // removing selection from inserted text
textbox.SelectionStart += text.Length;

Это вставит содержимое кнопки в позицию курсора (и заменит выделенный текст) - так же, как пользователь вводил его с клавиатуры. PS. если textbox неизвестно, его можно найти с помощью

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

Вместо FocusManager.GetFocusScope(this) вы можете поставить window.

Если вам это нужно не только для текстовых полей - функции WinAPI должны помочь. Смотри http://www.pinvoke.net/default.aspx/user32.sendinput

1 голос
/ 14 декабря 2010

Вы хотите использовать эту виртуальную клавиатуру с другими приложениями, или это происходит только в вашем приложении?Кроме того, если это только ваше приложение, хотите ли вы когда-либо вставлять символы только в один конкретный TextBox или потенциально в любой TextBox?

Если это виртуальная клавиатура, предназначенная для работы с любым приложением,тогда вы захотите использовать метод Win32 API, например SendKeys .WinForms имеет чрезвычайно простой интерфейс для с использованием SendKeys .

Если нужно добавить только символы к одному TextBox, тогда модифицировать TextBox намного прощеText свойство, а не пытаться вызывать события для него, чтобы получить желаемое поведение.Есть свойство CaretIndex, которое скажет вам, куда вставить символ.Кроме того, это простая конкатенация строк.

1 голос
/ 14 декабря 2010
        <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>

Код:

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        MainTextBox.Text += (sender as Button).Content.ToString();
    }
1 голос
/ 14 декабря 2010

Сделайте ваши кнопки не сфокусированными (Focusable = false).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...