Ir para o conteúdo
ragazzo04

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

Mensagens Recomendadas

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)
}

Editado por ragazzo04

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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;
	 }

Editado por rezanov

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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();
    }

Partilhar esta mensagem


Ligação 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

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.