Zmiana koloru tła TextBox (programistycznie) jako reakcja na ontextchanged

0

Witajcie,
Mam pewien problem. Stworzyłem sobie własną klasę dziedziczącą po TextBox. Chciałbym zmienić kolor tła mojego textBoxa jeśli wprowadzany tekst będzie niezgodny z wyrażeniem regularnym. Kontrola wyrażenia regularnego działa (przetestowane za pomocą tooltipa ;) ), jednak nie mogę zmienić koloru tła. Zależy mi aby właśnie tak się zachowywał mój TextBox. Podpowie ktoś jak to rozwiązać?

Poniżej kod klasy:

using System;
using System.Windows.Controls;
using System.Windows.Input;
using System.Text.RegularExpressions;

class ptKosz : TextBox
{
    String regex;
    public ptKosz(int jakaWalidacja)
    {
        if (jakaWalidacja == 1)
            this.regex = "^[1-9][0-9]?[0-9]?$"; //speed
        else if (jakaWalidacja == 2)
            this.regex = "^[1-9][0-9]{2}[0-9]?$"; //rpm
        else if (jakaWalidacja == 3)
            this.regex = "^[1-9][0-9]?$"; //speedup, speeddown, nacisk
        else if (jakaWalidacja == 4)
            this.regex = "^[1-8]{1}$"; //ilość próbek
        Width = 120;
    }
    protected override void OnTextInput(TextCompositionEventArgs e)
    {
        base.OnTextInput(e);
        if (!Regex.IsMatch(Text, regex))
            ToolTip = "nie pasuje";
        else
            ToolTip = "pasuje";
    }
    protected override void OnTextChanged(TextChangedEventArgs e)
    {
        base.OnTextChanged(e);
        if (!Regex.IsMatch(Text, regex))
            ToolTip = "nie pasuje";
        else
            ToolTip = "pasuje";
    }
}
0

Próbowałeś ustawiać właściwość this.BackgroundColor?

I zrób jakiś enum oznaczający typ walidacji, bo takie przekazywanie magicznych liczb wygląda słabo.

0

Niestety nie da się ustawić czegoś takiego jak this.BackGroundColor. To było moje pierwsze podejście (przesiadam się z JAVA i myślałem, że będzie to tak banalne jak tam- coś na zasadzie "this.setBackgroundColor(Color.RED) ), jednak okazuje się, że tu tak prosto nie jest.

Co do "wyliczanki"- tak, to będzie najprawdopodobniej switch/case, teraz to tylko na potrzeby szybkich testów. Zwłaszcza, że będzie tam ciut więcej możliwych wyrażeń. Zapewne też nie będę tego określał liczbowo, ale to za chwilę. Na teraz utknąłem na (tak mi się wydawało) pikuś-problemie, którym jest kolor tła ;)

0

Poprawka- w Java oczywiście brzmiało to tak: this.setBackground(Color.RED); (jakoś mnie kuło w oczy to co napisałem i aż musiałem zerknąć w kod java ;).

0

Ok, jeśli ktoś będzie szukał rozwiązania i po słowach kluczowych tu trafi to wklejam kod z rozwiązaniem (oczywiście,że było to banalne. Konsultacje u kolegi pomogły ;) )

 
using System.Windows.Controls;
using System.Windows.Input;
using System.Text.RegularExpressions;
using System.Windows.Media;

/*
* nrWalidacji:
* 0 - speed
* 1 - rpm
* 2 - speed_up, speed_down, nacisk
* 3 - ilość próbek
*/

class ptKosz : TextBox
{
    int nrWalidacji;
    string[] wyrazenie = {
        "^[1-9][0-9]?[0-9]?$",
        "^[1-9][0-9]{2}[0-9]?$",
        "^[1-9][0-9]?$",
        "^[1-8]{1}$"
    };
    public ptKosz(int nrWalidacji) 
    {
        Width = 120;
        this.nrWalidacji = nrWalidacji;
    }
    protected override void OnTextInput(TextCompositionEventArgs e)
    {
        base.OnTextInput(e);
        if (!Regex.IsMatch(Text, wyrazenie[nrWalidacji]))
            this.Background = Brushes.Red;
        else
            this.Background = Brushes.White;
    }
    protected override void OnTextChanged(TextChangedEventArgs e)
    {
        base.OnTextChanged(e);
        if (!Regex.IsMatch(Text, wyrazenie[nrWalidacji]))
            this.Background = Brushes.Red;
        else
            this.Background = Brushes.White;
    }
}

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