Takie same nazwy kontrolek, które są w innych GroupBox'ach

0

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ć.

0

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ć.

0

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?

0
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)

0

Hm, całkiem niezły pomysł, ale jak widzę starczy na jednego, nie dopowiedziałem, ale w groupboxach mam kilka textboxów :|

0

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;
        }
        }
0

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

1

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);
}
0

Można by to skleić w:

IEnumerable<TextBox> DajTextBoxa(Control Control, string tag)
{
    return Control.Controls.OfType<TextBox>().Where(txt => txt.Tag == "cos_tam");
}
0

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;
    }
}
1
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ć?

0

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. ;(

1

Hint: UserControl

1 użytkowników online, w tym zalogowanych: 0, gości: 1