Forum Pplware

Versão Completa: Validaçoes - C#
Está de momento a ver uma versão reduzida do nosso conteúdo. Ver versão completa com o formato adequado.
Boas!

Estou aqui com uns problemas a finalizar o meu projecto da cadeira de Programação Orientada a Objectos.
O problema é com as excepções, queria validar vários campos (de textBox´s). Basicamente eles têm de ser validados antes de adicionar novo atleta. O que quero validar, é no campo da textBox2, apenas podem ser inseridos valores numéricos.

Deixo aqui o código:
Citar:private void button1_Click(object sender, EventArgs e)
{
toolStripStatusLabel1.Text = " ";
label10.Text = " ";


// O problema esta aqui, se isto for executado o programa "crasha"... Sad
/*int X = 0;
if (textBox2.Text != "")
{
try
{
X = int.Parse(textBox2.Text);
}
catch (Exception)
{
toolStripStatusLabel1.Text = ("Erro! Apenas valores numericos.");
}


}*/


Atleta a = new Atleta(textBox1.Text, int.Parse(textBox2.Text), int.Parse(textBox3.Text), textBox4.Text, textBox5.Text, comboBox1.Text, TimeSpan.Parse(textBox6.Text), TimeSpan.Parse(textBox7.Text));

if (a.TempoChegada < a.TempoPartida)
{
toolStripStatusLabel1.Text = ("Erro! O tempo de partida nunca poderá ser superior ao tempo de chegada.");
}
else if ((a.Idade < 10) || (a.Idade > 45))
{
toolStripStatusLabel1.Text = ("Erro! A idade que definiu não pode ser usada; Apenas entre 10 e 45 anos.");
}
else if ((textBox1.Text.Length <= 0) || (textBox2.Text.Length <= 0) || (textBox3.Text.Length <= 0) || (textBox4.Text.Length <= 0) || (textBox5.Text.Length <= 0) || (comboBox1.SelectedItem.ToString().Equals("Selecionar") || (textBox6.Text.Length <= 0) || (textBox7.Text.Length <= 0)))
{
toolStripStatusLabel1.Text = ("Erro! Ainda existem campos por preencher.");
}
else
{
a.Escalao = a.DeterminarEscalao();

a.TempoDeProva = a.determinatempoprova();

GestaoAtleta.atletas.Add(a);

label10.Text = GestaoAtleta.atletas.Count.ToString();

//show
dataGridView1.DataSource = null;
dataGridView1.DataSource = GestaoAtleta.atletas;

dataGridView1.Refresh();
toolStripStatusLabel1.Text = ("Atleta adicionado com sucesso!");
//Clean();
}
}

Outro problema esta ainda na validação:

Citar:else if ((textBox1.Text.Length <= 0) || (textBox2.Text.Length <= 0) || (textBox3.Text.Length <= 0) || (textBox4.Text.Length <= 0) || (textBox5.Text.Length <= 0) || (comboBox1.SelectedItem.ToString().Equals("Selecionar") || (textBox6.Text.Length <= 0) || (textBox7.Text.Length <= 0)))
{
toolStripStatusLabel1.Text = ("Erro! Ainda existem campos por preencher.");
}

Aquando da execução do programa, se meter nenhum campo sem nada... isso não funciona, porque os campos da textBox2, textBox3 são numéricos e da textbox6 e textBox7 são TimeSpan... ou seja não são do tipo .text, se o utilizador não meter nenhum destes (textBox2, textBox3, textbox6 e textBox7) o programa "crasha".

Ajudem-me pro favor... amanhã tenho de entregar isto. Sad
Porque não usas o evento keypress ou change para verificar quando são alterados os dados na text e ai fazer a validação?!
Já consegui a primeira parte... mas não consigo resolver a 2º parte, a ultima validação de que falo. Neutral
Mas tipo se utilizares o evento keypress do objecto pretendido, neste caso da text, poderás testar onde o user está a clicar...assim não tens de fazer essa validação mais tarde.
Também vais correr menos recursos do sistema.
Não posso usar isso.

Quanto a minha ultima validação, saber algo? ( Quando os campos estão nulos )

Cumpz Wink
Ja experimentas-te outro tipo de analise de modo a achar se o texto é nulo, por exemplo...

textBox1.Text.Equals("")
ou
textBox.Text==null



eu ja tive algumas chatices com strings por causa de serem nulas ("") e usei algo do tipo :

if (StringAuxiliar!=null ){

//executa codigo correspondente

}
O problema não está ai.

O código "está bem", o problema é que a textBox 2 e 3 e a textBox 6 e 7 são do tipo inteiro e TimeSpan, respectivamente. Se o utilizador não preencher uma dessas textBox, o programa "craxa". Dizem-me que tenho de usar um TryParse nessas textBox, mas não sei como.

:\
Agora fiquei um bocado confuso, textbox do tipo inteiro? e TimeSpan?
As textbox recebem strings ,logo o que quer que o utilizador escreva , vão ser strings.
claro que podes converter isso atravez do metodo Convert.(...),ou podes dar a interpretação que quiseres aos dados.


em relação ao tryParse....é melhor adequares algo deste genero.


try
{
//codigo
}
catch (Exception)
{
//tratar erro
}
Talvez assim:

Boas!

Estou aqui na minha ultima validação do meu trabalho. O que eu quero é proibir o utilizador de tentar Adicionar novo atleta sem preencher os campos necessários.

Aqui deixo o código:
Citar://Se algum campo não estiver preenchido: Erro!
else if ((textBox1.Text == "") || (textBox2.Text == "") || (textBox3.Text == "") || (textBox4.Text == "") || (textBox5.Text == "") || (comboBox1.SelectedItem.ToString().Equals("Selecionar") || (textBox6.Text == "") || (textBox7.Text == "")))
{
toolStripStatusLabel1.Text = ("Erro! Ainda existem campos por preencher.");
}

O problema está nas textBox2, 3, 6 e 7, que não recebem valores do tipo string, ou seja, basta o utilizador não preencher uma dessas, que o programa falha e a validação não funcione.

Se alguém me puder ajudar, agradecia. (É a minha ultima validação e o trabalho fica concluído)
Cumprimentos Wink
int result;
int.tryparse("string", out result);

O resultado fica em result e a funcao devolve um booleano.

Usa tambem:

String.IsNullOrEmpty("string");

Para verificares se uma string é null ou vazia k e ekivalente a "".

Se fores ao google tens essas respostas todas e é mt mais rapido do que aki.
URL's de Referência