• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Danielgc

C++/Cli- Permitir apenas inserção de inteiros numa textbox

11 mensagens neste tópico

Boa tarde, estou a pesquisar, mas ainda não encontrei solução... Estou a fazer um pequeno programa e queria que apenas fosse possivel ao utilizador inserir valores inteiros numa textbox, isto é, caso for inserido outro tipo de caracteres enviar uma messagebox a avisar que o tipo de dados é inválido..

Se alguém me puder ajudar agradeço

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes sempre transferir o conteudo da textbox para uma string (String std ou wxString) e utilizar as funções de conversão para inteiros. Normalmente estas funções retornam um código de erro no caso o conteudo não corresponda a um inteiro. Fazes um teste ao valor retornado e no caso de corresponder a erro lanças a mensagem de erro!

Fica aqui o link para o manual da wxString : http://www.wxwidgets.org/manuals/2.6/wx_wxstring.html#wxstringtolong

Cumprimentos!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estás a usar alguma biblioteca para textboxes em consola (tendo em conta o nome do tópico - CLI significa command-line interface)?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estás a usar alguma biblioteca para textboxes em consola (tendo em conta o nome do tópico - CLI significa command-line interface)?

Bem visto! Nem tinha reparado nisso! Porem o funcionamento deve ser semelhante...

Cumprimentos!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estás a usar alguma biblioteca para textboxes em consola (tendo em conta o nome do tópico - CLI significa command-line interface)?

Acho que neste caso CLI é Common Language Infrastructure ;P Que é como quem diz, .NET.

Se assim for, podes limitar a textbox a um número máximo de caracteres. É só acederes à propriedade MaxLength e afectares com o valor que quiseres.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Acho que neste caso CLI é Common Language Infrastructure ;P Que é como quem diz, .NET.

Tens razão, nem me lembrei disso. Então a solução é mesmo como o TheDark diz...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas não continua a ter que estar se o valor inserido não contem por exemplo virgulas ou letras?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E se, em vez de uma textbox, usares uma daquelas cenas que se carrega para cima e para baixo. Tem um valor predefinido, para baixo nunca passa de de um limite definido, para cima a mesma coisa...... Normalmente premitem inserção manual também.........

Não sei como se chamam............

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E se, em vez de uma textbox, usares uma daquelas cenas que se carrega para cima e para baixo. Tem um valor predefinido, para baixo nunca passa de de um limite definido, para cima a mesma coisa...... Normalmente premitem inserção manual também.........

Não sei como se chamam............

NumericUpDown
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes usar a seguinte classe (que tem um problema com o paste) que deriva de TextBox e faz validação de números:

public ref class NumberTextBox: System::Windows::Forms::TextBox {
System::String ^prevtext;
protected:
void virtual OnTextChanged(System::EventArgs ^e) override {
	int selstart = SelectionStart;
	bool hasPoint = false;

	for (int i=0; i<Text->Length; ++i) {
		if (Text[i] < '0' || Text[i] > '9') {
			//Descomentar as linhas seguintes para aceitar pontos
			//if (Text[i] == '.' || Text[i] == ',') {
			//	if (hasPoint == true) {
			//		Text = prevtext;
			//		SelectionStart = selstart-1;
			//		return;
			//	} else {
			//		hasPoint = true;
			//	}
			//} else {
				Text = prevtext;
				SelectionStart = selstart-1;
				return;
			//}
		}
	}

	TextBox::OnTextChanged(e);
	prevtext = gcnew System::String(Text);
}

public:
NumberTextBox(): TextBox() {
	prevtext = "";
}
};

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigados pela ajuda!

após pesquisar bastante optei pelo uso do try..catch, que é basicamente o seguinte:

int converter(String ^s){

int x;

try{x=::System::Convert::ToInt32(s);

return(x);

}catch(FormatException ^e){

MessageBox::Show("Insira apenas valores numéricos");

return(0);

}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora