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
ReadOnly = true;
Tylko chyba nie wszystkie typy kontrolek to majďż˝.
tm
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.
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
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
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.
a nawet wystarczy:
textBox1.BackColor = textBox1.BackColor;
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