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

ragazzo04

Manipulação de vários botões em simultâneo

Recommended Posts

ragazzo04

Boas noite pessoal

Eu gostaria que ajudassem aqui num probleminha que estou a ter com o manuseamento de vários botões em simultâneo.

capturarofa.png

Eu preciso que os butões passem do estado enable=false para true consoante o numero obtido por este select a BD

string cnn = "server = localhost ; user id = root ; pwd = 'root';database=gabineteinformatica";
MySqlConnection myConnection = new MySqlConnection(cnn);
MySqlCommand myCommand = myConnection.CreateCommand();
myConnection.Open();
myCommand.CommandText = "SELECT count(idmaquinas) FROM maquinas INNER JOIN local ON maquinas.Local_idLocal = local.idLocal WHERE Local_Nome = @L_N";
myCommand.Parameters.AddWithValue("@L_N", labelLocalMaquina.Text);
MySqlDataReader myReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection);

{
int numMaquinasSQL = Convert.ToInt32(myReader[0]);

Todos os botões tem o nome nButtonX (1<X<30), eu queria que ao carregar o form e o select devolver X, os butões de 1 até X ficassem enable=true...

A minha ideia seria do tipo:

for(int numMaquinas = 1; numMaquinas <= numMaquinasSQL ; numMaquinas++)
{
//(Sem ideia do que por aqui dentro)
}

Edited by ragazzo04

Share this post


Link to post
Share on other sites
rezanov

Com os dados da BD podes fazer criar List<string> com os nomes dos botões.

Ex: List<string> btNames = new List<string>(new string[] {"Button2", "Button3", "Button4", "Button5"});

Depois para cada procurar para cada Control Button verificar se a propriedade Name está na lista.

Algo do tipo:

foreach (Control c in this.Controls)
	 {
		 if (c is Panel)
		 {
			 foreach (Control child in ((Panel)c).Controls)
			 {
				 if (child is Button)
					 if (btNames.Contains(((Button)child).Name))
						 ((Button)child).Enabled = false;
			 }
		 }
		 if (c is Button)
			 if (btNames.Contains(((Button)c).Name))
				 ((Button)c).Enabled = false;
	 }

Edited by rezanov

Share this post


Link to post
Share on other sites
ragazzo04

Com os dados da BD podes fazer criar List<string> com os nomes dos botões.

Ex: List<string> btNames = new List<string>(new string[] {"Button2", "Button3", "Button4", "Button5"});

Depois para cada procurar para cada Control Button verificar se a propriedade Name está na lista.

Algo do tipo:

foreach (Control c in this.Controls)
	 {
		 if (c is Panel)
		 {
			 foreach (Control child in ((Panel)c).Controls)
			 {
				 if (child is Button)
					 if (btNames.Contains(((Button)child).Name))
						 ((Button)child).Enabled = false;
			 }
		 }
		 if (c is Button)
			 if (btNames.Contains(((Button)c).Name))
				 ((Button)c).Enabled = false;
	 }

Então tenho que fazer isto 1º:

List<string> btNames = new List<string>(new string[] {"nButton1" , "nButton2", "nButton3", "nButton4", "nButton5" , nButton6" , "nButton7", "nButton8", "nButton9", "nButton10" , nButton11" , "nButton12", "nButton13", "nButton14", "nButton15" , nButton16" , "nButton17", "nButton18", "nButton19", "nButton20" , nButton21" , "nButton22", "nButton23", "nButton24", "nButton25" , nButton26" , "nButton27", "nButton28", "nButton29", "nButton30"});

depois não percebi bem a parte do foreach, coloco dentro daquele for que disse que tinha ou substituo aquele for?

Obrigado pela ajuda

Share this post


Link to post
Share on other sites
rezanov

É apenas uma forma de abordar o problema.

A lista vai ter apenas os nomes de 1 a X (devolvido pelo select), crias essa lista por ex: dentro do for que colocaste.

o foreach percorre todos os Controls (Panels, Buttons, TextBoxes, ... ) do teu form e verifica se a propriedade Name está na lista criada anteriormente.

apenas interessa testar os Controls do tipo Button, no meu teste os Buttons estavam dentro de um Panel e quando testei não fazia o pretendido, por isso é que verifico também se dentro de cada Panel existem Controls do tipo Button e aplico a mesma receita.

Share this post


Link to post
Share on other sites
ragazzo04

É apenas uma forma de abordar o problema.

A lista vai ter apenas os nomes de 1 a X (devolvido pelo select), crias essa lista por ex: dentro do for que colocaste.

o foreach percorre todos os Controls (Panels, Buttons, TextBoxes, ... ) do teu form e verifica se a propriedade Name está na lista criada anteriormente.

apenas interessa testar os Controls do tipo Button, no meu teste os Buttons estavam dentro de um Panel e quando testei não fazia o pretendido, por isso é que verifico também se dentro de cada Panel existem Controls do tipo Button e aplico a mesma receita.

Hum ok, vou testar.

Mais uma vez obrigado

Share this post


Link to post
Share on other sites
ragazzo04

Boas já consegui resolver o meu problema.

Aqui fica a minha resolução

public void contaMaquinasRapido()
    {

	    string cnn = "server = localhost ; user id = root ; pwd = 'root';database=gabineteinformatica";
	    MySqlConnection myConnection = new MySqlConnection(cnn);
	    MySqlCommand myCommand = myConnection.CreateCommand();
	    myConnection.Open();
	    myCommand.CommandText = "SELECT count(idmaquinas) FROM maquinas INNER JOIN local ON maquinas.Local_idLocal = local.idLocal WHERE Local_Nome = @L_N";
	    myCommand.Parameters.AddWithValue("@L_N", labelLocalMaquina.Text);
	    MySqlDataReader myReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection);


	    while (myReader.Read())
	    {

		    int numMaquinasSQL = Convert.ToInt32(myReader[0]);
		    string blabla = "nButton";
		    for (int numMaquinas = 1; numMaquinas <= numMaquinasSQL; numMaquinas++)
		    {
			    nButton botao = (nButton)this.panel1.Controls[(blabla + numMaquinas.ToString())];

			    botao.Enabled = true;
		    }
	    }
	    myReader.Close();
	    myConnection.Close();
    }

Share this post


Link to post
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

×

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.