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

Sim, depende um bocado para o que é, mas é uma solução um bocado daily wtf

Boas,

Não sei se isso é para avaliação, mas caso seja eu não deixava as coisas assim.

Cumprimentos

É para avaliação, mas neste momento decidi por me ficar esta solução (que tenho perfeita noção que nem dentro das piores soluções é a melhor) devido ao tempo que tenho e ao que me falta para terminar este projecto.

Não compreendo o que possa estar a dificultar o resolução desse problema..

Em relação ao exemplo que me envias-te funcionava a 100% no teu projecto assim que passava para o meu com mesmo nome de butões com as mesmas tag's e o código no mesmo local, não fazia nada...
 
Não li isto com muita atenção, mas vê lá se procuras algo tipo isto, para não estares a fazer "botao.enabled = batatas" para todos os botões. Se tiveres 500botões....500 linhas de copy paste.... (eu sei...foi exagerado)

string blabla = "nButton"
for(int numMaquinas = 1; numMaquinas <= numMaquinasSQL ; numMaquinas++)
{
Button botao = this.TabPage1.Controls((blabla + num.ToString()));
botao.Enabled = false; //ou true ....
}


this.TabPage1 caso os botoes estivessem num controlo chamado TabPage1 dentro do form (this) principal.
mete aí mais um if antes de fazer o enabled, para verificar que o controlo existe e isso não estoirar. (caso da BD venha um valor maior que o nº de botões que tens.
 
Não li isto com muita atenção, mas vê lá se procuras algo tipo isto, para não estares a fazer "botao.enabled = batatas" para todos os botões. Se tiveres 500botões....500 linhas de copy paste.... (eu sei...foi exagerado)

string blabla = "nButton"
for(int numMaquinas = 1; numMaquinas <= numMaquinasSQL ; numMaquinas++)
{
Button botao = this.TabPage1.Controls((blabla + num.ToString()));
botao.Enabled = false; //ou true ....
}


this.TabPage1 caso os botoes estivessem num controlo chamado TabPage1 dentro do form (this) principal.
mete aí mais um if antes de fazer o enabled, para verificar que o controlo existe e isso não estoirar. (caso da BD venha um valor maior que o nº de botões que tens.

No inicio foi por ai que tentei mas não consegui.

Os meus botões estão dentro do panel devo substituir o "TabPage1" por "Panel1"??

Código:
 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 = this.panel1.Controls((blabla + numMaquinas.ToString()));
                    botao.Enabled = true;
                }
            }


            myReader.Close();
            myConnection.Close();
        }

dá-me erro no "nButton botao = this.panel1.Controls((blabla + numMaquinas.ToString()));"
Error 10 Non-invocable member 'System.Windows.Forms.Control.Controls' cannot be used like a method.
 
parentisis rectos.... (VB a mais....)

Button botao = (Button)this.panel1.Controls[(blabla + numMaquinas.ToString())];

Outras coisas...
-se só vais ler uma linha (estás a fazer um count), podes fechar logo o reader e a ligação. Se tiveres 500 botões, só depois de alterares a 500 botões é que estás a fechar a ligação.
-try-catch
-Podes criar uma função à parte se fores usar esse "for" mais que uma vez por ex. para meter tudo disabled. (caso interesse)

private bool MudaBotoes(int numMaquinasSQL, bool activaBtn)
{
string blabla = "nButton"; for (int numMaquinas = 1; numMaquinas <= numMaquinasSQL; numMaquinas++) { Button botao = (Button)this.panel1.Controls[(blabla + numMaquinas.ToString())]; botao.Enabled = activaBtn; }
}
 
parentisis rectos.... (VB a mais....)

Button botao = (Button)this.panel1.Controls[(blabla + numMaquinas.ToString())];

Outras coisas...
-se só vais ler uma linha (estás a fazer um count), podes fechar logo o reader e a ligação. Se tiveres 500 botões, só depois de alterares a 500 botões é que estás a fechar a ligação.
-try-catch
-Podes criar uma função à parte se fores usar esse "for" mais que uma vez por ex. para meter tudo disabled. (caso interesse)

private bool MudaBotoes(int numMaquinasSQL, bool activaBtn)
{
string blabla = "nButton"; for (int numMaquinas = 1; numMaquinas <= numMaquinasSQL; numMaquinas++) { Button botao = (Button)this.panel1.Controls[(blabla + numMaquinas.ToString())]; botao.Enabled = activaBtn; }
}

Muito obrigado ficou a funcionar :D Já posso apagar as mil linhas de código :D

Obrigado pelas outras dicas tambem :D
 
Back
Topo