Witam! Co zrobić, żebym miał możliwość nazwania kilku kontrolek tak samo, pod warunkiem, że są w innych GroupBox'ach? Domyślam się, że chodzi o ustawienie być może rodzica itd., ale nie wiem jak się za to zabrać.
Da się nazwać kontrolki tak samo (w gruncie rzeczy to są zwykłe zmienne)? Jeżeli będą w jednej klasie, to chyba może być ciężko.
Może tablica? Aczkolwiek z poziomu designera może być ciężko z tym współpracować.
Bo chciałem zrobić takie coś: mam kilka textboxów, które pełnią tę samą funkcję -> wpisuje w nie dane. Tyle, że każdy groupbox znów pełni inną funkcję. Podam przykład. Mam groupbox "Wyślij" i "Pokaż". W obydwu są 1 textbox i button. W pierwszym groupboxie button wysyła na podany adres maila, a w drugim pokazuje w okienku ten mail. Podobny mam właśnie problem, bo potrzeba mi kilka groupboxów i nie będę każdych kontrolek w innym nazywał np. "email1", "email2" itd. Chcę żeby każdy groupbox mógł mieć nazwane tak samo kontrolki jak inne kontrolki z innego groupboxa. Czy to wykonalne, bez bawienia się w zagmatwane tworzenie klas?
TextBox DajTextBoxa(GroupBox gr)
{
foreach (Control c in gr.Controls)
{
TextBox txt = c as TextBox;
if (txt != null)
{
MessageBox.Show("znaleziono textboxa!");
return txt;
}
}
return null;
}
moze to Cie zadowoli:) nie jest to co prawda dokładnie to co chciałeś, ale nie musisz się przejmować nazwami textboxa, wystarczy że wiesz w jakim jest groupboxie(no i oczywiście musi tam być tylko jeden textBox)
Hm, całkiem niezły pomysł, ale jak widzę starczy na jednego, nie dopowiedziałem, ale w groupboxach mam kilka textboxów :|
No to mała przeróbka:
List<TextBox> DajTextBoxa(GroupBox gr)
{
List<TextBox> lista = new List<TextBox>();
foreach (Control c in gr.Controls)
{
TextBox txt = c as TextBox;
if (txt != null)
{
MessageBox.Show("znaleziono textboxa!");
lista.Add(txt);
}
}
return lista;
}
}
To zadziała, ale skąd będę wiedział, który textbox jest który? Ten, który pierwszy dodałem teoretycznie będzie pierwszy, ale nie chce mi się tego pamiętać, no ale dzięki za kod i tak się przyda, trudno ;D
Można jeszcze taki myk zrobić:
IEnumerable<TextBox> DajTextBoxa(Control Control)
{
return Control.Controls.OfType<TextBox>();
}
IEnumerable<TextBox> DajTextBoxa(Control Control, string tag)
{
return DajTextBoxa(Control).Where(txt => txt.Tag == tag);
}
Można by to skleić w:
IEnumerable<TextBox> DajTextBoxa(Control Control, string tag)
{
return Control.Controls.OfType<TextBox>().Where(txt => txt.Tag == "cos_tam");
}
A jaka jest przewaga tego yielda?
IEnumerable<TextBox> DajTextBoxa(Control Control)
{
foreach (Control c in Control.Controls)
{
if (c is TextBox && "Bla bla" == "Bla bla")
yield return (TextBox)c;
}
}
xeo545x39 napisał(a)
Bo chciałem zrobić takie coś: mam kilka textboxów, które pełnią tę samą funkcję -> wpisuje w nie dane. Tyle, że każdy groupbox znów pełni inną funkcję. Podam przykład. Mam groupbox "Wyślij" i "Pokaż". W obydwu są 1 textbox i button. W pierwszym groupboxie button wysyła na podany adres maila, a w drugim pokazuje w okienku ten mail. Podobny mam właśnie problem, bo potrzeba mi kilka groupboxów i nie będę każdych kontrolek w innym nazywał np. "email1", "email2" itd. Chcę żeby każdy groupbox mógł mieć nazwane tak samo kontrolki jak inne kontrolki z innego groupboxa. Czy to wykonalne, bez bawienia się w zagmatwane tworzenie klas?
Nazwy pól obiektu (bo kontrolki są polami obiektu formatki) nie mogą być takie same, ale można ustawić właściwość Name
i po tym je rozróżniać.
Tylko, skoro są to różne kontrolki, do różnych czynności, to i nazwy powinny być różne, np coś w rodzaju. w gbxSend: txtSendAddress i btnSendOk, a w gbxShow: txtShowContent i btnShowOk. Wtedy wiadomo, która kontrolka do czego służy. Dlaczego nie chcesz tak zrobić?
Dobra przyznam się, że piszę bota do Tibii :D Potrzebne mi proste funkcje i dlatego chcę mieć "Mana Trainer" i alert, gdy mam tam czegoś mało. I teraz do każdej takiej funkcyjki mam groupbox w "Mana Trainer" mam textbox Mana i w alert groupbox też muszę mieć textbox Mana. Ale dobra poradzę sobie, spróbuję to co koledzy wyżej napisali albo po prostu dam inną nazwę. ;p
Czytaj dalej...
Ogólnie to koncepcję miałem taką i myślałem, że jest jakiś mechanizm, w którym jakieś kontenery na kontrolki typu GroupBox (no może nie jest do końca kontenerem) są oddzielną klasą i trzymają oddzielne kontrolki. Coś na wzór tego myślałem: GroupBox1.Controls.TextBox1
. Wiem, że tak się nie da, bo kontrolki są na formie, aczkolwiek mogę indexerem znaleźć, ale co mi z tego, jak te kontrolki i tak są na formie. ;(
Hint: UserControl