Czy ktoś wie, która właściwość ustawia kolor tekstu dla wyłączonej kontroli? Muszę wyświetlić tekst w wyłączonym TextBox
i chcę ustawić jego kolor na czarny.Jak zmienić kolor czcionki wyłączonego TextBox?
Odpowiedz
UWAGA: zobacz poniżej odpowiedź Cheetah, ponieważ określa ona warunek konieczny do uruchomienia tego rozwiązania. Ustawianie BackColor
z .
myślę, co naprawdę chcesz zrobić, to włączyć TextBox
i ustawić właściwość ReadOnly
do true
.
Zmiana koloru tekstu w zablokowanym TextBox
jest nieco trudna. Myślę, że prawdopodobnie będziesz musiał podklasować i nadpisać zdarzenie OnPaint
.
ReadOnly
jednak powinien dać taki sam wynik, jak !Enabled
i pozwala zachować kontrolę nad kolorem i formatowaniem TextBox
. Myślę, że nadal będzie on obsługiwał wybieranie i kopiowanie tekstu z urządzenia TextBox
, co nie jest możliwe w przypadku wyłączonego urządzenia TextBox
.
Inną prostą alternatywą jest użycie Label
zamiast TextBox
.
Działa to również w ten sposób. Dzięki! –
Jeśli to jest twoja odpowiedź, idź dalej i kliknij sprawdź dla mnie :) –
To nie jest dokładna odpowiedź, ale jest to uczciwa alternatywa;) –
Dodatkowo, aby ForeColor był przestrzegany w TextBox oznaczonym jako ReadOnly, musisz jawnie ustawić kolor BackColor. Jeśli chcesz go nadal używać domyślnego BackColor, musisz ustawić zestaw wyraźnie, ponieważ projektant jest zbyt inteligentny dla własnego dobra tutaj. Wystarczy ustawić kolor BackColor na aktualną wartość. Robię to w przypadku obciążenia dla postaci, tak jak poniżej:
private void FormFoo_Load(...) {
txtFoo.BackColor = txtFoo.BackColor;
}
Dzięki za informację, zastanawiałem się, dlaczego to nie działa! Każdy pomysł, dlaczego tak się dzieje? –
IIRC, gdzieś jest flaga, aby sprawdzić, czy kolory zostały dostosowane. Ta flaga nie zostanie ustawiona, dopóki nie zostanie ustawiona opcja BackColor. Nie mogę tego teraz znaleźć, ale jeśli zaczniesz grzebać w Reflectorze, być może będziesz w stanie. – Cheetah
+1. To jednak przypuszcza żebrak. – smirkingman
hi ustawić atrybut tylko do odczytu, aby prawda od strony kodowej lub uruchomić czasu nie od momentu projektowania
txtFingerPrints.BackColor = System.Drawing.SystemColors.Info;
txtFingerPrints.ReadOnly = true;
Można Spróbuj tego. Zastępuje zdarzenie OnPaint w TextBox.
protected override void OnPaint(PaintEventArgs e)
{
SolidBrush drawBrush = new SolidBrush(ForeColor); //Use the ForeColor property
// Draw string to screen.
e.Graphics.DrawString(Text, Font, drawBrush, 0f,0f); //Use the Font property
}
ustawić ControlStyles do "UserPaint"
public MyTextBox()//constructor
{
// This call is required by the Windows.Forms Form Designer.
this.SetStyle(ControlStyles.UserPaint,true);
InitializeComponent();
// TODO: Add any initialization after the InitForm call
}
Albo możesz spróbować tej siekać
W Wpisz wydarzenie ustawić ostrość
int index=this.Controls.IndexOf(this.textBox1);
this.Controls[index-1].Focus();
Więc twoja kontrola nie będzie skupiona i zachowa się jak wyłączona.
Jeśli chcesz wyświetlać tekst, które nie mogą być edytowane lub wybrany można po prostu użyć etykiety
Nie, jeśli masz sprawdzanie poprawności względem pola tekstowego. Validators nie działają na asp: etykiety niestety. Nie tak proste, jak początkowo sądziłeś. – Fandango68
Ponadto do odpowiedzi przez @ spoon16 i @Cheetah, zawsze należy ustawić właściwość tabstop
False w polu tekstowym do zapobiega domyślnemu wybraniu tekstu.
Alternatywnie, można też zrobić coś takiego:
private void FormFoo_Load(...) {
txtFoo.Select(0, 0);
}
lub
private void FormFoo_Load(...) {
txtFoo.SelectionLength = 0;
}
Właśnie znalazł świetny sposób to robić. W moim przykładzie używam RichTextBox ale powinien działać z każdym Kontroli:
public class DisabledRichTextBox : System.Windows.Forms.RichTextBox
{
// See: http://wiki.winehq.org/List_Of_Windows_Messages
private const int WM_SETFOCUS = 0x07;
private const int WM_ENABLE = 0x0A;
private const int WM_SETCURSOR = 0x20;
protected override void WndProc(ref System.Windows.Forms.Message m)
{
if (!(m.Msg == WM_SETFOCUS || m.Msg == WM_ENABLE || m.Msg == WM_SETCURSOR))
base.WndProc(ref m);
}
}
Można bezpiecznie ustawić Enabled = true i false ReadOnly = i będzie działać jak etykiety, zapobiegając focus, wprowadzania danych przez użytkownika, zmiana kursora, bez faktycznego wyłączenia.
Sprawdź, czy to działa. Pozdrowienia
Wystarczy obsłużyć Włącz zmianie i ustawić go do koloru trzeba
private void TextBoxName_EnabledChanged(System.Object sender, System.EventArgs e)
{
((TextBox)sender).ForeColor = Color.Black;
}
odpowiedź od cheeta jest prawidłowe. Zastanów się, czy nie zmieniłeś filtra? –