Przerwanie wykonania programu gdy dowolny textbox jest bez wprowadzonej wartości

0

Witam Wszystkich.
Jestem "świeży" w programowaniu w C#(i jakimkolwiek innym też). Mam pytanie. Czy da się na jednej instrukcji
if()
{

}
else
{
}
Wykryć czy co najmniej jeden z textboxów jest == "" bo wyczaiłem już jak to zrobić, jednakże za pomocą if'a ale dla każdego textboxa z osobna. i jest to trochę żmudne pisanie. Bardzo proszę o pomoc bo spędza mi to sen z powiek.
I z góry serdecznie dziękuję!!!
Pozdrawiam.

1
foreach(Control c in this.Controls)
{
    TextBox tb = c as TextBox;
    if(tb != null)
    {
        if(tb.Text = string.Empty)
        {
            MessageBox.Show("Jeden TextBox jest pusty!");
        }
    }
}
0

A co gdy pustych textboxów jest więcej niż jeden?? też będzie to działać??

0

Tzn. zupełnie nie rozumiesz tego kodu, który wkleiłem?
Najpierw uczymy się podstaw, operatorów, pętli, instrukcji warunkowych, potem bierzemy się za okienka.

0

Ok postaram się jeszcze douczyć. Chociaż niektórych elementów w ogóle nie rozumiem. Ale im więcej w tym siedzę tym więcej zaczynam czaić.

1

cale wyrazenie warunkowe moze byc bardziej zlozone, a poszczegolne elementy polaczone operatorami AND, OR, XOR w c# odpowiednio &&, ||, ^
wszytkie operatory http://msdn.microsoft.com/en-us/library/6a71f45d.aspx

1
foreach(Control c in this.Controls) // dla każdej kontrolki formularza (Controls to kolekcja kontrolek dowolnej kontrolki, nie tylko formularz)
{
    TextBox tb = c as TextBox; // próbujemy ją rzutować na TextBox
    if(tb != null) // jeśli się udało
    {
        if(tb.Text = string.Empty) // jeśli napis jest pusty
        {
            MessageBox.Show("Jeden TextBox jest pusty!"); // to spełniliśmy nasz warunek
        }
    }
}

To chyba powinno być w Newbie.

0

Czy aby czasem nie brakuje break; w tym kodzie? :)

0

hmm ja się zastanawiam tylko czy w kodzie somekid'a w linii

if(tb.Text = string.Empty) // jeśli napis jest pusty

nie powinno być podwójnego == bo jak daje taki sam kod to podkreśla mi go jako błąd

0
Deti napisał(a)

Czy aby czasem nie brakuje break; w tym kodzie? :)

Może tak, może nie - zależy co autor chce dalej z tym zrobić, może chce policzyć wszystkie puste textboxy, wtedy break mu utrudni. :)

smiglo85 napisał(a)

nie powinno być podwójnego == bo jak daje taki sam kod to podkreśla mi go jako błąd

Oczywiście, że powinien być podwójny. Z jednym się nawet nie skompiluje.

0

mam jedno pytanie bo jak wklejam to w kodzie źródłowym to nic się wielkiego nie dzieje a powinno. Troszkę zmodyfikowałem kod.
właściwie to tylko na messagebox'em wstawiłem

tb.BackColor = Color.DarkOrange;

ale w ogóle nic się nie dzieje ;-(

0

wg twojej wersji bez tej linii nic nie robi
może w złym miejscu tego używam??
ja wkleiłem ten kod w miejscu gdzie definiuje się przycisk.

0

Nie wiem co to jest "miejsce, w którym definiuje się przycisk". Pokaż kod.
Poza tym ta pętla przeszukuje jedynie kontrolki położone bezpośrednio na Form. Jeśli masz jakieś Panele, GroupBoxy, itd. to znajdujących się na nich TextBoxów nie uwzględni.

0

mam GroupBoxy a na nich textboxy

0

dałoby się jakoś przerobić ten kod aby sprawdzał również w GroupBoxach??

1

Tak. Trzeba go przerobić na rekurencyjny, tak aby sprawdzał nie this.Controls, ale kolekcję kontrolek dowolnej kontrolki. (Bo każdy obiekt typu Control ma kolekcję dzieci Controls).

0

rety ja się zaliczam do amatorów a ty mi każesz taki kosmos zrobić ale dzięki za rade poczytałem już trochę na temat rekurencji. Więc może coś tam mi wyjdzie.

0

Nikt Ci nic nie każe..

0
smiglo85 napisał(a)

rety ja się zaliczam do amatorów a ty mi każesz taki kosmos zrobić[...]

Jeszcze kosmosów nie widziałeś ;)

0

fakt nikt mi nic nie każe, ale jak chcę żeby mi działało, to muszę sobie pokombinować i dostosować się do wskazówek znających się.

1

Programowanie polega na kombinowaniu. Ewentualnie na znalezieniu gotowca w sieci. A sekurencja to podstawy programowania. Żeby ja zrozumieć, musisz jedynie zrozumieć rekurencje. ;)

0

znalazłem fajny artykuł, który dobrze przekazuje zasadę działania rekurencji
Zrozumieć rekurencję
język programowania inny ale zasada działania podobna;-)

1

Jakby jeszcze było potrzebne, a ktoś nie dawał sobie rady, to tu jest kod, który pokazuje o co chodzi:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;

namespace WindowsFormsApplication4
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // pobranie listy wszystkich TextBoxów i zmiana ich tła na czerwone

            IEnumerable<TextBox> allTextBoxes = this.GetAllControls<TextBox>(this);

            foreach (var item in allTextBoxes)
            {
                item.BackColor = Color.Red;
            }
        }

        /// <summary>
        /// Wyszukuje wszystkie kontrolki potomne danej kontrolki.
        /// </summary>
        /// <typeparam name="T">typ kontrolki</typeparam>
        /// <param name="parent">kontrolka rodzic</param>
        private IEnumerable<T> GetAllControls<T>(Control parent)
            where T : Control
        {
            List<T> result = new List<T>();

            foreach (Control item in parent.Controls)
            {
                T c = item as T;
                if (c != null)
                {
                    result.Add(c);
                }

                result.AddRange(GetAllControls<T>(item));
            }

            return result;
        }

    }
}

0

Dzięki somekind. Chyba bym na to nie wpadł sam rozważałem całkowicie inne rozwiązania. Jeszcze raz bardzo dziękuję.

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