none
cores de commandbutton RRS feed

  • Pergunta

  • Tenho um Formulario com 85 CommandButtons

    Ao carregar o Formulario O sistema precisa ler o Banco e Verificar o Status de Cada um dos Botoes e deixa-lo com a cor correspondente ao Status.. so que acho que existe uma maneira mais agil da qual eu estou fazendo pois estou usando case ?? poderiam me ajudar ??

     Dim SQL As String
                SQL = "SELECT * from TbBoxes where NumEnd = 957"

                Conectar()

                Dim cmd As New SqlCommand(SQL, Conecta)
                Dim dr As SqlDataReader = cmd.ExecuteReader()

                While dr.Read()

                    Select Case dr("NUMBOX").ToString()
                        Case 1
                            If dr("STATUS").ToString() = "LIVRE" Then
                                cmdbox01.BackColor = Color.Lime
                            ElseIf dr("STATUS").ToString() = "OCUPADO" Then
                                cmdbox01.BackColor = Color.Red
                            ElseIf dr("STATUS").ToString() = "VENCENDO" Then
                                cmdbox01.BackColor = Color.DodgerBlue
                            End If
                        Case 2
                            If dr("STATUS").ToString() = "LIVRE" Then
                                cmdbox02.BackColor = Color.Lime
                            ElseIf dr("STATUS").ToString() = "OCUPADO" Then
                                cmdbox02.BackColor = Color.Red
                            ElseIf dr("STATUS").ToString() = "VENCENDO" Then
                                cmdbox02.BackColor = Color.DodgerBlue
                            End If
                        Case 3
                            If dr("STATUS").ToString() = "LIVRE" Then
                                cmdbox03.BackColor = Color.Lime
                            ElseIf dr("STATUS").ToString() = "OCUPADO" Then
                                cmdbox03.BackColor = Color.Red
                            ElseIf dr("STATUS").ToString() = "VENCENDO" Then
                                cmdbox03.BackColor = Color.DodgerBlue
                            End If
                        Case 4
                            If dr("STATUS").ToString() = "LIVRE" Then
                                cmdbox04.BackColor = Color.Lime
                            ElseIf dr("STATUS").ToString() = "OCUPADO" Then
                                cmdbox04.BackColor = Color.Red
                            ElseIf dr("STATUS").ToString() = "VENCENDO" Then
                                cmdbox04.BackColor = Color.DodgerBlue
                            End If
                        Case 5
                            If dr("STATUS").ToString() = "LIVRE" Then
                                cmdbox01.BackColor = Color.Lime
                            ElseIf dr("STATUS").ToString() = "OCUPADO" Then
                                cmdbox01.BackColor = Color.Red
                            ElseIf dr("STATUS").ToString() = "VENCENDO" Then
                                cmdbox01.BackColor = Color.DodgerBlue
                            End If

    Obrigado a todos pela ajuda


    terça-feira, 10 de fevereiro de 2015 04:46

Respostas

  • Você me segure fazer isso no evento de cada Botão ??? Se for isso vai ficar mais lento ainda, Eu preciso de um jeito que ele leia o banco e carregue os dados e troque as cores de acordo com o Status. Da Forma mais rápida, usando um for ou While. Eu vi alguns jeitos criando objetos, mais não sei como manejar os botoes.

    RBARBIERI o que o Jean disse está correto.

    1º Supondo que inicialmente vc carregue as informações iniciais de acordo com cada status vc colocar cores diferentes para cada poltrona, logo já temos uma visualização inicial.

    2º Ao clicar em uma outra poltrona que visivelmente está liberada devemos ter em mente que existe outras pessoas utilizando o sistema que aloca o acento do mesmo ônibus (logo seu sistema vai precisar de um timer para pegar de tempos em tempos e atualizar os status de cada poltrona que esteja livre).

      Obs: em questão de criar um evento para cada botão não se preocupe, vc pode criar um único evento que aponte para cada btn, assim todos btns utilizam o mesmo evento, claro pensando que cada btn tem um id na base de dados para ser validado o status.

    3º Acho que a questão de performance não se aplica neste tipo de sistema são leves por si próprio por não ter uma interação em grande escala com a base de dados, claro que devemos contar a sua lógica como por exemplo.

    Método 1: Para carregamento inicial ler os dados de datareader.

    Método 2: Para validar os status de cadas poltrona seria de outra maneira como pegar apenas uma linha de acordo com o id e por ai vai..


    Nome : Romy G. Moura Cargo: Analista Programador

    quarta-feira, 11 de fevereiro de 2015 12:49

Todas as Respostas

  • Não seria mais fácil iniciar cada botão como verde, e no evento Backcolor_changed você mandar ele fazer a verificação com os dados que foram retornados do banco de dados?
    terça-feira, 10 de fevereiro de 2015 19:45
  • Obrigado pela Resposta Jean...

    Mais voce diz deu validar o Evento Dentro de Cada Botao ?? pode me ajudar com mais detalhes...

    quarta-feira, 11 de fevereiro de 2015 02:46
  • Bem, eu não sei quais valores ao certo você está recebendo do banco de dados, então suponho agora que seja em integer como:

    0 = nao

    1 = sim

    2 = vai vencer

    No evento backcolor_changed (ele irá acionar de imediato caso tenha uma função que inicie fixando todas as cores em verde)

    if dispon = 1 then

    botao.backcolor = color.lime

    elseif dispon = 0 then

    botão.backcolor = color.red

    elseif dispon = 2 then

    botao.backcolor = color.dodgeBlue

    quarta-feira, 11 de fevereiro de 2015 04:57
  • Você me sugere fazer isso no evento de cada Botão ??? Se for isso vai ficar mais lento ainda, Eu preciso de um jeito que ele leia o banco e carregue os dados e troque as cores de acordo com o Status. Da Forma mais rápida, usando um for ou While. Eu vi alguns jeitos criando objetos, mais não sei como manejar os botoes.
    • Editado RBARBIERI quarta-feira, 11 de fevereiro de 2015 16:05
    quarta-feira, 11 de fevereiro de 2015 12:24
  • Você me segure fazer isso no evento de cada Botão ??? Se for isso vai ficar mais lento ainda, Eu preciso de um jeito que ele leia o banco e carregue os dados e troque as cores de acordo com o Status. Da Forma mais rápida, usando um for ou While. Eu vi alguns jeitos criando objetos, mais não sei como manejar os botoes.

    RBARBIERI o que o Jean disse está correto.

    1º Supondo que inicialmente vc carregue as informações iniciais de acordo com cada status vc colocar cores diferentes para cada poltrona, logo já temos uma visualização inicial.

    2º Ao clicar em uma outra poltrona que visivelmente está liberada devemos ter em mente que existe outras pessoas utilizando o sistema que aloca o acento do mesmo ônibus (logo seu sistema vai precisar de um timer para pegar de tempos em tempos e atualizar os status de cada poltrona que esteja livre).

      Obs: em questão de criar um evento para cada botão não se preocupe, vc pode criar um único evento que aponte para cada btn, assim todos btns utilizam o mesmo evento, claro pensando que cada btn tem um id na base de dados para ser validado o status.

    3º Acho que a questão de performance não se aplica neste tipo de sistema são leves por si próprio por não ter uma interação em grande escala com a base de dados, claro que devemos contar a sua lógica como por exemplo.

    Método 1: Para carregamento inicial ler os dados de datareader.

    Método 2: Para validar os status de cadas poltrona seria de outra maneira como pegar apenas uma linha de acordo com o id e por ai vai..


    Nome : Romy G. Moura Cargo: Analista Programador

    quarta-feira, 11 de fevereiro de 2015 12:49
  • Ola Rommy obrigado pela resposta

    1 - estou carregando as informacoes da maneira que coloquei acima.. meus botoes tambem ja se iniciam com o verde.. conforme o cliente seleciona algum dos botoes de acordo com o que e feito eu mudo o status.. somente na tela dele...

    supondo que tenha 3 usuarios o timer vai atualizar o status de todos os botoes.. e nessa atualizacao que eu gostaria de saber se posso fazer algo mais rapido do que eu fiz com o case... a cada 15 segundos pretendo repassar o status

    quarta-feira, 11 de fevereiro de 2015 16:04
  • Ola Rommy obrigado pela resposta

    1 - estou carregando as informacoes da maneira que coloquei acima.. meus botoes tambem ja se iniciam com o verde.. conforme o cliente seleciona algum dos botoes de acordo com o que e feito eu mudo o status.. somente na tela dele...

    supondo que tenha 3 usuarios o timer vai atualizar o status de todos os botoes.. e nessa atualizacao que eu gostaria de saber se posso fazer algo mais rapido do que eu fiz com o case... a cada 15 segundos pretendo repassar o status

    Minha opinião é que ao clicar mude o status na base e o timer seria apenas para verificar os status para cada usuário mas esta verificação deve ser feita para mudar as cores de cada poltrona.

    Acho que em questão de performance ficaria bom (Rápido) não teria com que se preocupar já que os dados de verificação são poucos.


    Nome : Romy G. Moura Cargo: Analista Programador

    quinta-feira, 12 de fevereiro de 2015 23:20