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

Odpowiedz Nowy wątek
2011-08-04 13:23
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ć.


<error>There was an error during loading user signature. Please try to reboot the Universe and check again.</error>

Pozostało 580 znaków

2011-08-04 13:50
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ć.


Some people see things as they are, and say "why?". I dream things that never were and say "why not?".

Pozostało 580 znaków

2011-08-04 13:59
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?


<error>There was an error during loading user signature. Please try to reboot the Universe and check again.</error>

Pozostało 580 znaków

2011-08-04 15:07
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)


edytowany 1x, ostatnio: Loganek, 2011-08-04 15:08

Pozostało 580 znaków

2011-08-04 15:10
0

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


<error>There was an error during loading user signature. Please try to reboot the Universe and check again.</error>

Pozostało 580 znaków

2011-08-04 15:13
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;
        }
        }

Można też yieldem. - O_o 2011-08-04 15:27

Pozostało 580 znaków

2011-08-04 15:21
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


<error>There was an error during loading user signature. Please try to reboot the Universe and check again.</error>

Pozostało 580 znaków

2011-08-04 15:27
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);
}

Some people see things as they are, and say "why?". I dream things that never were and say "why not?".
edytowany 1x, ostatnio: Wronq, 2011-08-04 16:23

Pozostało 580 znaków

2011-08-04 15:35
O_o
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");
}

O̾..͠o
edytowany 1x, ostatnio: O_o, 2011-08-04 15:35
Taka była pierwotna wersja, ale potem stwierdziłem, że textboxy można po tym rozpoznawać. Można też dać coś w stylu .Where(txt => txt.Tag.StartsWith("cos_tam")); - Wronq 2011-08-04 15:40
Zaszpanuj i zrób wersje z yield. ;) - O_o 2011-08-04 15:47
Ta jest najbardziej szpanerska chyba :D - Wronq 2011-08-04 15:50
Właśnie że da się bardziej jadąc yieldem. Wyszło by to poza jedną linijką ale miało by pewne zalety przewyższające gadżet linq. :) - O_o 2011-08-04 15:57

Pozostało 580 znaków

2011-08-04 16:02
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;
    }
}

Some people see things as they are, and say "why?". I dream things that never were and say "why not?".
Możesz yieldującą metodę potraktować foreachem wygodnie. Ma to pewne zalety w wydajności bodajże oraz można zrobić parę innych tricków. Np można się bawić z break. :) - O_o 2011-08-04 16:41

Pozostało 580 znaków

2011-08-04 16:47
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ć?


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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