Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Kolory przy enabled = false

1 view
Skip to first unread message

MJK

unread,
Nov 19, 2009, 5:41:53 AM11/19/09
to
Witam

By� mo�e to trywialne, nie wiem.

Mam sobie okno, czy te� wiele okien, w kt�rych wy�wietlam i edytuj� jakie�
dane.
Robi� to za pomoc� textbox�w, combobox�w, datetimepieker�w itp.
Jednak w pewnych przypadkach, �e chc� te dane tylko wy�wietli�
uniemo�liwiaj�c ich edycj�.
Robie to najpro�ciej jak si� da, bo pod kontrolkami mam palela, kt�remu daj�
wtedy enabled = false.
Tylko, �e wtedy kolory kotrolek s� brzydkie. Mo�na to jako� zmieni� ?

Pozdrawiam
Mariusz

Tomasz Muszyński

unread,
Nov 19, 2009, 2:48:49 PM11/19/09
to
W dniu 09-11-19 11:41, MJK pisze:

ReadOnly = true;

Tylko chyba nie wszystkie typy kontrolek to majďż˝.

tm

Buentigre

unread,
Nov 19, 2009, 6:07:14 PM11/19/09
to
Je�eli chodzi o t�o, to wystarczy na starcie aplikacji (np.: w
konstruktorze okna) ustawi� (raz!) r�cznie kolor t�a kontrolek
(textbox�w, combo itd) le��cych na panelu, np:

textBox1.BackColor = Color.White;

po tym zabiegu zmiana enabled na false nie rusza ju� t�a.
Niestety ForeColor dalej blednie. Ale mo�na to po��czy� z
ReadOnly i b�dziesz mia� sta�e t�o i kolor tekstu.

MJK

unread,
Nov 20, 2009, 3:34:53 AM11/20/09
to
Witam!

Ech dzi�ki. Jednak vcl jest jako� bardziej przyjazny ;)

Z tekstboxami i numericami jako� sobie radz�. Mo�e si� komu� przyda, to
wklejam kod.

Ale mo�e koto� by mia� jaki� dobry pomys� jak "�adnie" zablokowa� comboboxy
i datetimepickery ?

public void DisableTxt(Control uc)
{
for (int i = 0; i < uc.Controls.Count; i++)
if (uc.Controls[i] is NumericUpDown)
{
(uc.Controls[i] as NumericUpDown).BackColor =
Color.FromKnownColor(KnownColor.Info);
(uc.Controls[i] as NumericUpDown).TabStop = false;
(uc.Controls[i] as NumericUpDown).Increment = 0;
(uc.Controls[i] as NumericUpDown).ReadOnly = true;
}
else if (uc.Controls[i] is TextBox)
{
(uc.Controls[i] as TextBox).BackColor =
Color.FromKnownColor(KnownColor.Info);
(uc.Controls[i] as TextBox).ReadOnly = true;
(uc.Controls[i] as TextBox).TabStop = false;
}
else
DisableTxt(uc.Controls[i]);
}//void DisableTxt(Control uc)

public void EnableTxt(Control uc, string[] dontEnable)
{

for (int i = 0; i < uc.Controls.Count; i++)
if (uc.Controls[i] is NumericUpDown)
{
if (!Contain(dontEnable, (uc.Controls[i] as NumericUpDown).Name))
{
(uc.Controls[i] as NumericUpDown).ReadOnly = false;
(uc.Controls[i] as NumericUpDown).BackColor =
Color.FromKnownColor(KnownColor.Window);
(uc.Controls[i] as NumericUpDown).TabStop = true;
(uc.Controls[i] as NumericUpDown).Increment = 1;
}
}
else if (uc.Controls[i] is TextBox)
{
if (!Contain(dontEnable, (uc.Controls[i] as TextBox).Name))
{
(uc.Controls[i] as TextBox).ReadOnly = false;
(uc.Controls[i] as TextBox).BackColor =
Color.FromKnownColor(KnownColor.Window);
(uc.Controls[i] as TextBox).TabStop = true;
}
}
else
EnableTxt(uc.Controls[i], dontEnable);
}//void EnableTxt(Control uc)

Pozdrawiam
Mariusz

Paweł Kierski

unread,
Nov 20, 2009, 3:35:22 AM11/20/09
to
Buentigre wrote:
> Jeżeli chodzi o tło, to wystarczy na starcie aplikacji (np.: w
> konstruktorze okna) ustawić (raz!) ręcznie kolor tła kontrolek
> (textboxów, combo itd) leżących na panelu, np:
>
> textBox1.BackColor = Color.White;

Problem jest taki, że ja na swoim kompie akurat nie mam białego tła
w kontrolkach. Wypadałoby co najmniej sprawdzić via
PInvoke/GetSysColor()

--
Paweł Kierski
ne...@pkierski.net

Buentigre

unread,
Nov 20, 2009, 12:04:40 PM11/20/09
to
On Fri, 20 Nov 2009 09:35:22 +0100, Paweďż˝ Kierski <ne...@pkierski.net>
wrote:
> Problem jest taki, �e ja na swoim kompie akurat nie mam bia�ego t�a
>w kontrolkach. Wypada�oby co najmniej sprawdzi� via
>PInvoke/GetSysColor()

Bia�y kolor by� tylko przyk�adem. Nic nie stoi na przeszkodzie aby
zamiast konkretnego koloru pos�u�y� si� kolorami systemowymi:

textBox1.BackColor = SystemColors.Window;

W ten spos�b uratujemy kolor t�a kontroli nie znaj�c jego warto�ci.

Buentigre

unread,
Nov 20, 2009, 3:47:18 PM11/20/09
to
>textBox1.BackColor = SystemColors.Window;

a nawet wystarczy:

textBox1.BackColor = textBox1.BackColor;

Paweł Kierski

unread,
Nov 23, 2009, 3:37:44 AM11/23/09
to

Chodziło mi o zwrócenie uwagi na takie właśnie szczegóły - jak robić,
to od razu dobrze 8-) A gdyby się czepiać dalej, to taką metodę trzeba
by uzupełnić o "odświeżenie" kolorów przy zmianie przez użytkownika
systemowej palety.

--
Paweł Kierski
ne...@pkierski.net

0 new messages