Jump to content

[Visual C++] (Problema) Timers


ApolloPT
 Share

Recommended Posts

Olá a todos,

Ando a fazer um trabalho para uma disciplina de programação e deparei-me com um problema ao qual não arranjo explicação e espero aqui que algum de vocês me ajude pois já esgotei todas as minhas tentativas àcerca do assunto  😛 !

Isto é, quero que o timer devolva um valor inteiro que possa ser usado dentro de um botão mais precisamente que o timer comece dentro ao clicar no botão e que gere uma imagem aleatória e que permita usar o valor da variavel aleatória dentro do botão fora do timer, pelo código que lhe meti era suposto ter feito isto tudo ( é a primeira vez que estou a usar timers mas está tudo no lugar só se falta alguma coisa! ), mas o que faz na realidade é que ao clicar-mos mostra a imagem mas a variavel que contém o valor que vai ser introduzido na estrutura de repetição ( if ) dentro do timer para escolher a imagem não deixa passar a variavel para fora mais precisamente dentro do botão a tempo real, isto é, só aparece a seguir o valor do clique anterior andado assim atrasado a mostrar o valor atribuido a variavel no clique anterior e a veriavel está declarada em private para todos os objectos timer e button terem acesso a essa variavel com o valor aleatório!

P.S. Se for necessário forneço o código para ajudar!

Aguardo resposta,

ApolloPT

Link to comment
Share on other sites


#pragma endregion
private:
int alias, alias1, alias2;
private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {

		 alias=0;
		 alias1=0;
		 alias2=0;

		 }
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {

	timer1->Enabled=true;
	timer1->Start();

	timer2->Enabled=true;
	timer2->Start();

	timer3->Enabled=true;
	timer3->Start();

textBox4->Text=Convert::ToString(alias);
textBox5->Text=Convert::ToString(alias1);
textBox6->Text=Convert::ToString(alias2);
}
private: System::Void timer1_Tick(System::Object^  sender, System::EventArgs^  e) {


			DateTime n = DateTime::Now;
			Random^i=gcnew Random(n.Millisecond);

			alias = i->Next(10)+1;

			timer1->Enabled=false;

			if (alias==1){
				pictureBox1->Image=Drawing::Image::FromFile("C:\\projecto\\img\\ananas.png");

			}
			else if (alias==2){
				pictureBox1->Image=Drawing::Image::FromFile("C:\\projecto\\img\\banana.png");

			}
			else if (alias==3){
				pictureBox1->Image=Drawing::Image::FromFile("C:\\projecto\\img\\cenoura.png");

			}
			else if (alias==4){
				pictureBox1->Image=Drawing::Image::FromFile("C:\\projecto\\img\\cereja.png");

			}
			else if (alias==5){
				pictureBox1->Image=Drawing::Image::FromFile("C:\\projecto\\img\\couve.png");

			}
			else if (alias==6){
				pictureBox1->Image=Drawing::Image::FromFile("C:\\projecto\\img\\ervilhas.png");

			}
			else if (alias==7){
				pictureBox1->Image=Drawing::Image::FromFile("C:\\projecto\\img\\laranja.png");

			}
			else if (alias==8){
				pictureBox1->Image=Drawing::Image::FromFile("C:\\projecto\\img\\nabo.png");

			}
			else if (alias==9){
				pictureBox1->Image=Drawing::Image::FromFile("C:\\projecto\\img\\noz.png");

			}
			else if (alias==10){
				pictureBox1->Image=Drawing::Image::FromFile("C:\\projecto\\img\\uvas.png");

			}
			textBox1->Text=Convert::ToString(alias);


	 }
private: System::Void timer2_Tick(System::Object^  sender, System::EventArgs^  e) {

		 DateTime n = DateTime::Now;
			Random^i=gcnew Random(n.Millisecond);

			alias1 = i->Next(10)+1;

			timer2->Enabled=false;
			if (alias1==1){
				pictureBox2->Image=Drawing::Image::FromFile("C:\\projecto\\img\\uvas.png");

			}
			else if (alias1==2){
				pictureBox2->Image=Drawing::Image::FromFile("C:\\projecto\\img\\noz.png");

			}
			else if (alias1==3){
				pictureBox2->Image=Drawing::Image::FromFile("C:\\projecto\\img\\nabo.png");

			}
			else if (alias1==4){
				pictureBox2->Image=Drawing::Image::FromFile("C:\\projecto\\img\\laranja.png");

			}
			else if (alias1==5){
				pictureBox2->Image=Drawing::Image::FromFile("C:\\projecto\\img\\ervilhas.png");

			}
			else if (alias1==6){
				pictureBox2->Image=Drawing::Image::FromFile("C:\\projecto\\img\\couve.png");

			}
			else if (alias1==7){
				pictureBox2->Image=Drawing::Image::FromFile("C:\\projecto\\img\\cereja.png");

			}
			else if (alias1==8){
				pictureBox2->Image=Drawing::Image::FromFile("C:\\projecto\\img\\cenoura.png");

			}
			else if (alias1==9){
				pictureBox2->Image=Drawing::Image::FromFile("C:\\projecto\\img\\banana.png");

			}
			else if (alias1==10){
				pictureBox2->Image=Drawing::Image::FromFile("C:\\projecto\\img\\ananas.png");

			}



textBox2->Text=Convert::ToString(alias1);


	 }
private: System::Void timer3_Tick(System::Object^  sender, System::EventArgs^  e) {

		        DateTime n = DateTime::Now;
			Random^i=gcnew Random(n.Millisecond);
			alias2 = i->Next(10)+1;
			timer3->Enabled=false;

			if (alias2==1){
				pictureBox3->Image=Drawing::Image::FromFile("C:\\projecto\\img\\banana.png");

			}
			else if (alias2==2){
				pictureBox3->Image=Drawing::Image::FromFile("C:\\projecto\\img\\ananas.png");

			}
			else if (alias2==3){
				pictureBox3->Image=Drawing::Image::FromFile("C:\\projecto\\img\\cereja.png");

			}
			else if (alias2==4){
				pictureBox3->Image=Drawing::Image::FromFile("C:\\projecto\\img\\couve.png");

			}
			else if (alias2==5){
				pictureBox3->Image=Drawing::Image::FromFile("C:\\projecto\\img\\ervilhas.png");

			}
			else if (alias2==6){
				pictureBox3->Image=Drawing::Image::FromFile("C:\\projecto\\img\\laranja.png");

			}
			else if (alias2==7){
				pictureBox3->Image=Drawing::Image::FromFile("C:\\projecto\\img\\nabo.png");

			}
			else if (alias2==8){
				pictureBox3->Image=Drawing::Image::FromFile("C:\\projecto\\img\\noz.png");

			}
			else if (alias2==9){
				pictureBox3->Image=Drawing::Image::FromFile("C:\\projecto\\img\\uvas.png");

			}
			else if (alias2==10){
				pictureBox3->Image=Drawing::Image::FromFile("C:\\projecto\\img\\cenoura.png");

			}

textBox3->Text=Convert::ToString(alias2);

	 }

Só meti uma parte do código que foi "cirurgicamente" modificado para ficar mais simples e rápido de se entender porque o problema está detectado mas "cura" é que está em falta  😛 !

Quando é executado aparece o seguindo nos objectos:

textBox1: <número random>

textBox2: <número random>

textBox3: <número random>

textBox4: 0

textBox5: 0

textBox6: 0

E aqui fica a pergunta porque não aparece os mesmos valores das primeiras 3 textBox's nas 3 últimas?!

P.S. Pareceu-me ter ficado tudo em ordem mas se no debug der algum erro tramado avisem por aqui!

E Dark desculpa não ter posto o tópico no lugar certo mas quando dei pelo erro já era tarde  ?

Link to comment
Share on other sites

Com os timers não consegui meter a variavél a sair mas penso que o problema tenha sido por causa do desligar o timer a meio do do seu objecto em si!

Mas como forma alternativa retirei o código todo dos timers e meti dentro do botão e só declarei uma vez a variavel n e i e o problema ficou resolvido!

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.