2012-02-15 4 views
2

Я разработал приложение Windows Forms, которое используется на сенсорном компьютере. Можно ли отображать клавиатуру, когда пользователь нажимает на поле ввода (текстовое поле)? И как я могу это сделать?Клавиатура на экране в WinForms

+0

http://stackoverflow.com/questions/956879/net-winform-keyboard-control –

ответ

3

Вы в курсе Windows, имеет на экранной клавиатуре?

В Windows 7 все программы> Accesseries> Ease Of Access> On Screen Keyboard.

Вы можете написать свое собственное, если хотите, но я использую Windows каждый раз, когда мне не хочется подбирать клавиатуру.

Вы можете создать ярлык к нему:

Расположение% WINDIR% \ system32 \ osk.exe

Так, чтобы запустить его, в случае TextBox_Click (или что-то событие, которое вы хотите, чтобы огонь)

// Должен работать, я его не тестировал. System.Diagnostics.Process.Start ("c: \ Windows \ System32 \ osk.exe");

Просто обновление: на моей машине на работе у меня возникла ошибка при попытке запустить этот код (я построил его как тест), и мне пришлось скопировать osk.exe в другой каталог, а затем запустить его, и он сработал.

/// <summary> 
    /// Test to show launching on screen board (osk.exe). 
    /// </summary> 
    /// <param name="sender"></param> 
    /// <param name="e"></param> 
    private void textBox1_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      Process.Start(@"c:\Temp\OSK.exe"); 
     } 
     catch (Exception error) 
     { 
      string err = error.ToString(); 
     } 
    } 

И этот код работал.

+0

Я бы сказал, что это может быть немного подвержен ошибкам, чтобы использовать встроенный Windows On-Screen Keyboard, так как позволяет пользователю отправлять все виды нажатий клавиш, которые могут быть не такими, какие предназначены для приложения. В этом случае пользовательская экранная клавиатура будет более безопасной. – markj

1

Я думаю, что вы должны создать новую форму ccreate клавиатуры и запустить эту форму в текстовом поле нажмите

4

Ваш пример показывает ошибку для меня:

"Не удалось запустить экранную клавиатуру"

Я нашел этот код, который прекрасно работают без каких-либо ошибок:

static void StartOSK() 
{ 
    string windir = Environment.GetEnvironmentVariable("WINDIR"); 
    string osk = null; 

    if (osk == null) 
    { 
    osk = Path.Combine(Path.Combine(windir, "sysnative"), "osk.exe"); 
    if (!File.Exists(osk)) 
     osk = null; 
    } 

    if (osk == null) 
    { 
    osk = Path.Combine(Path.Combine(windir, "system32"), "osk.exe"); 
    if (!File.Exists(osk)) 
    { 
     osk = null; 
    } 
    } 

    if (osk == null) 
    osk = "osk.exe"; 

    Process.Start(osk); 
} 
1

думаю можно использовать. System.Diagnostics.process.start

System.Diagnostics.Process.Start("osk.exe"); 
Смежные вопросы