Witam.
Piszę oprogramowanie, które musi ogarnąć kwestię dotyku i klawiatury. Ja wiem, że jest systemowa i można to zrobić przez Process.Start("osk.exe")
ale mnie się to rozwiązanie nie podoba, bo to nie jest ta klawiatura, którą Windows 10 "wysuwa" od dołu w trybie tabletu. Urządzeni, na którym muszę to zrobić ma monitor z dotykiem po USB, to nie jest nic wbudowanego. System nie wykrywa tego jako urządzenie z funkcją dotyku. Muszę wywołać klawiaturę z .exe (nie osk).
Potrzebuje 3 eventy - MouseUp
, GotFocus
, Leave
. Zrobiłem sobie klasę:
public class TextEditWithKeyboard : TextEdit
{
public TextEditWithKeyboard()
{
MouseUp += TextEditWithKeyboard_MouseUp;
Leave += TextEditWithKeyboard_Leave;
GotFocus += TextEditWithKeyboard_GotFocus;
}
private void TextEditWithKeyboard_GotFocus(object sender, EventArgs e)
{
if(!Process.GetProcessesByName("FreeVK").Any())
{
Process.Start(AppDomain.CurrentDomain.BaseDirectory + "FreeVK.exe");
}
}
private void TextEditWithKeyboard_Leave(object sender, EventArgs e)
{
foreach (var process in Process.GetProcessesByName("FreeVK"))
{
process.Kill();
}
}
private void TextEditWithKeyboard_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (!Process.GetProcessesByName("FreeVK").Any())
{
Process.Start(AppDomain.CurrentDomain.BaseDirectory + "FreeVK.exe");
}
}
}
Problemem jest w tym, że teraz każdy TextEdit
muszę zamienić w metodzie InitializeComponents()
na TextEditWithKeyboard
. Czy to się później na mnie nie odbije? Mówi się, że nie powinno się niczego "edytować" w Designer.cs
, ponieważ to jest automatycznie wszystko generowane. Jest jakieś inne rozwiązanie na podpięcie do wybranych TextEdit
tych samych 3 eventów?