Čau lidi,
potřeboval bych poradit, jak nastavit nebo změnit barvu rámečku u komponenty TextBox ve winForms (u WPF to jde). Chtěl bych tím zvýraznit focus na vybraný TextBox. Standartní takovou vlastnost jsem nenašel. Prozatím jsem to "vyřešil" tak, že jsem TextBox vložil do Panelu o 2px většího a nastavil mu barvu pozadí :smile1: . Vím, že je to dost amatérské řešení, ale nic lepšího mě nenapadlo, proto se obracím na vás. S progamováním teprve začínám - hraju se s tím po večerech teprve asi 14 dní, takže mě prosím nekamenujte, jestli jde o triviální záležitost. Našel jsem něco na netu, ale mé začátečnické vědomosti nestačily na to, abych to pochopil :smile1:
Díky za pomoc
Jara
Fórum › .NET
Jak nastavit barvu rámečku u TextBoxu v C# ?
Zdravím,
už poměrně dlouhou dobu jsem s WinForms nepracoval, takže přesně nevím, jaké vlastnosti tam jsou, ale obecně vzato to takhle jednoduše nepůjde, protože WinForms je v podstatě takovej obal WinAPI a ty prvky vlastně kreslí systém (což je rozdíl oproti WPF). Nezbývá ti tedy nic jiného, než upravit vykreslení prvku -> buď vytvoříš potomka, kde přepíšeš potřebnou metodu a nebo by to mohlo jít po odchycení nějaké události toho TextBoxu. Víc ti teď nenapíšu, zkus prohledat MSDN.
Stran vlozeni do Panelu: me to prijde docela OK - pokud je to jen na jednom miste, tak to ani nevadi vykonu. Pokud by takovy prvek bylo treba pouzit casteji, pak souhlasim s Janosikem, ze je treba si bud podedit TextBox a provest override metody OnPaint.
Ale mozna by stacilo udelat UserControl do nejz by se vlozil ten TextBox a tomu UserControlu bych pridal property typu string a jmena Text abych mel pristup k textu toho TextBoxu + nejakou bool IsHighlighted + int BorderWidth? Uvnitr tohoto UserControlu bych take zpracovaval eventy GotFocus a LostFocus. Coz je v zasade to prvni reseni, jen trochu rozsirene.
Nize uvedeny priklad UserControl-u obsahuje pouze a jen TextBox textBox1. A doufam, ze dela, co je pozadovano. V designeru je treba naklikat pro textBox1 Multiline na true a dock na Fill. UserControl1 musi mit nastaveny Padding na pozadovanou sirku ohraniceni.
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
textBox1.GotFocus +=
new EventHandler(textBox1_GotFocus);
textBox1.LostFocus +=
new EventHandler(textBox1_LostFocus);
}
void textBox1_LostFocus(object sender, EventArgs e)
{
BackColor = Color.Blue;
}
void textBox1_GotFocus(object sender, EventArgs e)
{
BackColor = Color.Red;
}
}
Díky oběma za pomoc,
zkoušel jsem oboje a zase jsem se přiučil novým věcem :smile1: . Funguje to, tak jak jsem chtěl.
Nakonec ale přece zvažuju, že začnu používat WPF, protože bych musel upravovat každou druhou komponentu a to je další práce "navíc". Do WinForms jsem se pustil hlavně proto, že jsem pořídil pár knížek, kde se používají, tak jsem u toho zůstal. Ale vidím, že ve WPF jsou větší možnosti.
Jara
Souhlasim - pokud mas volnost volby, pak zustan u WPF. Podle me momentalni vyhoda WinForms je hlavne vice komercnich komponent a "doma" to az tak nevynikne.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Jak odstranit určtou barvu? — založil Figa
Jak zjistit aktuální barvu pod myší? — založil hubert
Jak měnit barvu pozadí včetně vzorku? — založil Aneta J.
Makro pro Word: Jak zjistit jestli je vybraný text a jak nastavit sc… — založil oxidián
Jak nastavit klávesnici. — založil Benny1181
Moderátoři diskuze