c # - Автоматична спливаюча клавіатура з сенсорним екраном на вкладці введення WinForms - Qaru

Коли я запускаю додаток WinForms (або Delphi, см. В кінці) в Windows 10 в режимі планшета , Сенсорна клавіатура робить не відкривається автоматично, коли поле введення сфокусовано.

Я вважаю, що це має відбуватися автоматично, без будь-якого додаткового коду / встановлення.

Для тесту у мене є найпростіше настільний додаток VS 2015 WinForms з одним TextBox control .

Для тесту у мене є найпростіше настільний додаток VS 2015 WinForms з одним   TextBox control

Це просто проект Windows Forms Application С # за умовчанням, створений Visual Studio. Код не доданий, властивості не змінені. Доданий тільки TextBox, скинувши з панелі інструментів (знову ж ніяких властивостей не змінилося):

this.textBox1 = new System.Windows.Forms.TextBox (); this.textBox1.Location = new System.Drawing.Point (64, 27); this.textBox1.Name = "textBox1"; this.textBox1.Size = new System.Drawing.Size (100, 20); this.textBox1.TabIndex = 0;

Щоб перевірити моє припущення, що спливаюче вікно повинно бути автоматичним:

  • Я спробував запустити Windows XP версії notepad.exe в Windows 10. Він автоматично спливає сенсорна клавіатура. Я сумніваюся, що у Windows XP була явна підтримка сенсорних клавіш.

  • Я також пробував деякі стародавні додатки MFC (наприклад, FileZilla 2.2.15 від 2005). Він також спливає сенсорна клавіатура у всіх своїх вводах. Знову ж таки, я впевнений, у MFC не було явної підтримки сенсорних клавіш.

  • Те ж саме для додатків, побудованих на wxWidgets (наприклад, FileZilla 3.x).

Схоже, що в WinForms щось зламалося, що запобігає автоматичне спливаюче вікно. Цікаво, що автоматичне спливаюче меню працює:

  • для (редагованих) комбінованих полів (ComboBox з DropDownStyle = DropDown)
  • для текстових полів в режимі пароля ( TextBox.PasswordChar )
  • для багатих текстових полів (RichTextBox)
  • коли поле введення має фокус в момент видалення апаратної клавіатури (я перевіряю це, гортаючи екран на ноутбуці Lenovo Yoga), але ніколи не після.

Я бачив все підказки про явне спливаючому меню, запустивши TabTip.exe. Наприклад :.

Більшість "рішень" пропонують такий код:

var progFiles = @ "C: \ Program Files \ Common Files \ Microsoft Shared \ ink"; var keyboardPath = Path.Combine (progFiles, "TabTip.exe"); this.keyboardProc = Process.Start (keyboardPath);

Але я не можу повірити, що це може бути "офіційним" способом. Якщо нічого іншого, то, тому що немає чистого способу приховати клавіатуру, відкриту при запуску TabTip.exe (рішення включають зломи, такі як вбивство процесу або відправка ключа Esc).

І насправді вищезгаданий хак, схоже, більше не працює в оновленні Windows 10 Anniversary:

Цікаво, що я бачу таку ж поведінку з додатками Delphi / С ++ Builder / VCL. Клавіатура не з'являється для полів редагування ( TEdit ). Він з'являється для комбінованих ящиків ( TComboBox ) І для полів редагування в режимі пароля ( PasswordChar ). Цікаво, що не для TRichEdit , Що помітно відрізняється від .NET RichTextBox, що, можливо, варто досліджувати.

Цей (без відповіді) питання описує однакове поведінка:
Додаток, написане Delphi XE8 touch в клавіатурі редагування, не відображається в Windows 10 .