Wstawianii elementu w mejsce focus

0

Witam,

W mojej aplikacji mam kilka textboxów oraz jeden przycisk,
jak rozpoznać w momencie kliknięcia na przycisk,
który element miał focus i w miejsce focusa (nie na koniec tekstu) wstawić jakiś znak.

W momencie kliknięcia w przycisk focus znika i nie wiem jak to ugryźć, w kodzie zakodowałem zmienna statyczna która przechowuje id textboxa który kliknąłem, w momencie kliknięcia w niego ustawiając focus, ale wydaje mi się że powinno być lepsze rozwiązanie ;/
Drugą rzeczą jest to, gdyż nie wiem jak wstawić element w miejsce gdzie się znajduje aktualnie focus, no w środek danego wyrazu.
Podejrzewam że trzeba pobrać długość tekstu i go przebudować, ale jak pobrać informację na którym miejscu znajduje się focus?

0
jawka7 napisał(a):

W momencie kliknięcia w przycisk focus znika

Nic nie znika. Focus otrzymuje kliknięty przycisk, a TextBox go traci.

w kodzie zakodowałem zmienna statyczna która przechowuje id textboxa który kliknąłem, w momencie kliknięcia w niego ustawiając focus, ale wydaje mi się że powinno być lepsze rozwiązanie ;/

Owszem, jest lepsze rozwiązanie - zmienna niestatyczna.

Drugą rzeczą jest to, gdyż nie wiem jak wstawić element w miejsce gdzie się znajduje aktualnie focus, no w środek danego wyrazu.
Podejrzewam że trzeba pobrać długość tekstu i go przebudować, ale jak pobrać informację na którym miejscu znajduje się focus?

W drugiej zmiennej zapamiętaj index (bodajże TextBox.SelectionStart) tego TextBoxa, który miał focus zanim kliknąłeś przycisk.

0
private Control _focusControl;

private void TextBox_GotFocus(object sender, EventArgs e)
{
    _focusControl = (Control)sender;
}

 private void button_Click(object sender, EventArgs e)
{
           var focusControl = _focusControl as TextBox;
           if (focusControl != null)
            {
                focusControl.Paste("text");
            }
}
0

W drugiej zmiennej zapamiętaj index (bodajże TextBox.SelectionStart) tego TextBoxa, który miał focus zanim kliknąłeś przycisk.

Ciekawe spróbuje tak, jednak pomysł drugi pomysł "mrjozo" bardziej mi się podoba, jedynie Paste nie chce zadziałać, tak jakby nie przyjmował żadnego parametru.

0

Przyjmuje http://msdn.microsoft.com/en-us/library/ms160635(v=vs.100).aspx
Podawaj zawsze konkretne komunikaty błędów - nie chce zadziałać nic nie znaczy

0

No overload for method 'Paste' takes 1 arguments

W zasadzie kod w całości skopiowałem jedynie zmieniłem zawartość do wklejenia

private Control _focusControl;

        private void tb1_GotFocus(object sender, RoutedEventArgs e)
        {
            _focusControl = (Control)sender;
        }


        private void ch1_Click(object sender, RoutedEventArgs e)
        {
            var focusControl = _focusControl as TextBox;

            if (focusControl != null)
                focusControl.Paste("*");
        }
0

Nie zauważyłem że to WPF tam faktycznie nie ma
Pozostaje Ci użyć SelectionStart

focusControl.Text = focusControl.Text.Insert(focusControl.SelectionStart, "*");
0

Ok, dzięki wielkie działa świetnie, tylko ja sobie za bardzo utrudniałem.
Jednak te metody w WPF muszę bardziej poodgarniać i nie będzie takich głupich problemów.

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