[ Burzza @ 29.09.2011. 19:09 ] @
Molim vas za pomoc.Pregledao sam stare teme,ali nisam nasao resenje za moj problem.Imam formu i u njoj 20.textBox-a i 4.comboBox-a.Porebna mi je takva kontrola,da program prekine izvrseje ako je neki textBox ili comboBox ostao prazan tj.nije uneta nikakva vrednost tipa int,float ili double i da prazan textBox ili comboBox ostane fokusiran tako da program ne moze nastaviti sa izvrsenjem.Probao sam sa kodom:
Code:
 private void button1_Click(object sender, EventArgs e)
        {
            int a;
            double b,c;

 if (textBox1.Text== "")
            {
                MessageBox.Show("Unesite vrednos a");
                               textBox1.Focus();
              }
if (textBox2.Text== "")
            {
                MessageBox.Show("Unesite vrednos b");
                               //textBox1.Select();
                               textBox2.Focus();
              }
//itd.

            a = Convert.ToInt32(textBox1.Text);
            b = Convert.ToDouble(textBox2.Text);
            c = a * b;
            textBox3.Text = c.ToString();
}


program odradi MessageBox,ali textBox ostane bez fokusa i dolazi do pucanja programa.Koristim MV C# 2008 Express Edition i totalni sam pocetnik u pomenutom programskom okruzenju.Ranije sam koristio Turbo Delphi 2006.i u njemu se ovaj problem resava ovako:
Code:
if Edit1.Text=' ' then begin
   ShowMessage('Unesite vrednost a.');
   Edit1.SetFocus;
   Exit;
   end;

Kako resiti ovaj,za mene,veliki problem.

[ lonelyrider_44 @ 29.09.2011. 19:24 ] @
Code (csharp):

private void button1_Click(object sender, EventArgs e)
{
             int a;
             double b,c;

  if (textBox1.Text== "")
             {
                 MessageBox.Show("Unesite vrednos a");
                                textBox1.Focus();
               } else
 if (textBox2.Text== "")
             {
                 MessageBox.Show("Unesite vrednos b");
                                //textBox1.Select();
                                textBox2.Focus();
               }else{
 //itd.

             a = Convert.ToInt32(textBox1.Text);
             b = Convert.ToDouble(textBox2.Text);
             c = a * b;
             textBox3.Text = c.ToString();
}
 }


Do konverzije treba da dođe samo ako nisu prazni, ako je neki prazan, ne treba uopšte da dođe do tog dela.
[ Burzza @ 29.09.2011. 19:55 ] @
Ne radi.Probao sam sa dva TextBox-a zaunos i jedan za rezultat.Odradi MessageBox,a zatim program pukne.
[ lonelyrider_44 @ 29.09.2011. 20:02 ] @
Probao si, sa else if varijantama?

Na kojoj liniji ti tačno pukne program?
[ Burzza @ 29.09.2011. 20:09 ] @
Probao sam sa kodom u odgovoru.Ako je prazan textBox1.pukne u a = Convert.ToInt32(textBox1.Text);,a ako je prazan textBox2.onda u b = Convert.ToDouble(textBox2.Text);
[ lonelyrider_44 @ 29.09.2011. 20:21 ] @
Što znači da te dve naredbe ne treba da se dese ukoliko je neki od textbox-ova prazan. Ajde okači taj kod, ili ceo projekat na neki hosting, pošto bi trebalo da radi. Nešto nisi napisao kako treba.
[ marko1981 @ 29.09.2011. 20:25 ] @
lonelyrider_44 ti je odgovorio, verovatno ti je promaklo.

Citat:
lonelyrider_44:Do konverzije treba da dođe samo ako nisu prazni, ako je neki prazan, ne treba uopšte da dođe do tog dela.

Mozda ce ti biti jasnije na sta je mislio ako dodas po jedan return iza Focus() poziva (tako ce ti biti i citljiviji kod, nego da ubacis 20+ else-if-ova).

Code (csharp):

private void button1_Click(object sender, EventArgs e)
{  
   if (provera_za_kontrolu_X)
   {
      MessageBox.Show("Unesite vrednost za kontrolu X");
      kontrola_X.Focus();
      return;
   }

   // proveri ostale kontrole na slican nacin...

   // validacija je OK
   a = ...
   b = ...
   c = ...
}
 
[ Burzza @ 29.09.2011. 20:26 ] @

Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

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

       
        private void button1_Click(object sender, EventArgs e)
        {
            int a;
            double b,c;

            if (textBox1.Text=="")
             {
                 MessageBox.Show("Unesite vrednos a");
                                textBox1.Focus();
               } else 
 if (textBox2.Text=="")
             {
                 MessageBox.Show("Unesite vrednos b");
                                //textBox1.Select();
                                textBox2.Focus();
               }
 //itd.


            a = Convert.ToInt32(textBox1.Text);
            b = Convert.ToDouble(textBox2.Text);
            c = a * b;

            textBox3.Text = c.ToString();
        }
    }
}

Ovo je ceo kod za ovu probu.
[ lonelyrider_44 @ 29.09.2011. 20:29 ] @
Fali ti else nakon provere textBox2 . Ovo je način na koji si hteo da uradiš program. Lakši način bi bio, recimo
Code:

...
if (textBox1.Text != "" && textBox2.Text != "")
{
//kod za mnozenje
}

[ Burzza @ 29.09.2011. 20:48 ] @
Radi.Radicu na prvi nacin,jer on kaze gde nije uneta vrednost,za razliku od drugog,koji samo zaustavi izvrsenje programa.Imam jos jedan problem,ali to cu ostaviti za kasnije.Moracu da otvorim novu temu.
Hvala ti na pomoci.Pozdrav.

Pozdrav izahvalnost i za "Marko 1981".

[Ovu poruku je menjao Burzza dana 29.09.2011. u 22:02 GMT+1]