WinForms + DevExpress - jak podpiąć TextEdit do tych samych eventów

0

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?

2

Teoretycznie nie powinno się edytować w Designer.cs ale praktyka wygląda inaczej :).

Według mnie powinieneś zmienić kod w dwóch miejscach. W InitializeComponents() czyli tam gdzie jest:

this.textEdit = new DevExpress.XtraEditors.TextEdit();

na:

this.textEdit = new Namespace.TextEditWithKeyboard(); 

i tam gdzie jest deklaracja zmiennej.

Zmienić:

private DevExpress.XtraEditors.TextEdit textEdit;

na:

private Namespace.TextEditWithKeyboard textEdit;

Teoretycznie taka zmiana kodu jest tożsama z tym gdybyś tą operację zrobił w edytorze (tzn. wpierw ręcznie usunął kontrolkę a potem dodał swoją i ponownie ustawił wszystkie właściwości).

Edytowałem nieraz Designer.cs i jeżeli robi się to z głową to nie ma problemu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1