none
Dúvidas com variáveis estáticas em uma classe RRS feed

  • Pergunta

  • Pessoal boa noite, estou com uma dúvida que está a me deixar confuso, situação é a seguinte:

    Criei essas variáveis dentro de uma classe denominada ValidaCampos:

    class ValidaCampos
        {
            public static bool Ug1Ligada;
            public static bool Ug2Ligada;

            public static void LigaUg1()
            {
                Ug1Ligada = true;
            }
            public static void DesligaUg1()
            {
                Ug1Ligada = false;
            }
            public static void LigaUg2()
            {
                Ug2Ligada = true;
            }
            public static void DesligaUg2()
            {
                Ug2Ligada = false;
            }

    e criei um combobox com essas condições:

    private void cbUg_SelectedIndexChanged(object sender, EventArgs e)
            {
                    if (cbUg.SelectedIndex == 0)
                {
                    ValidaCampos.LigaUg1(); //Foi selecionado a entrada da Ug1
                }
                else if (cbUg.SelectedIndex == 1)
                {
                    ValidaCampos.DesligaUg1(); //Foi selecionado a saida da UG1
                }
                else if (cbUg.SelectedIndex == 2)
                {
                    ValidaCampos.LigaUg2(); //Foi selecionado a entrada da Ug2
                }
                else if (cbUg.SelectedIndex == 3)
                {
                    ValidaCampos.DesligaUg2(); //Foi selecionado a saída da Ug2
                }
            }

    mas o que está acontecendo é que quando seleciono a opção que alteraria o valor da uma variável para false, ele na verdade volta o valor das duas variáveis para false, nao estou entendendo o que está acontecendo, alguem poderia me explicar de uma maneira simples pois sou iniciante e não estou conseguindo resolver esse problema. preciso manter o valor para true ou false e alterar conforme o usuário muda a opção no combobox...


    Agradeço qualquer ajuda

    Emerson


    quarta-feira, 24 de janeiro de 2018 06:27

Respostas

  • Olá Emerson Tudo bem?

    Bom primeiramente um sugestão, já que as propriedade Ug1Ligada e Ug2Ligada são manipuladas por métodos, então eu criaria propriedades estáticas privadas e deixaria Ug1Ligada Ug2Ligada apenas para recuperar os valores estáticos.

    Então eu deixaria minha classe assim:

    public static class ValidaCampos
    {
        private static bool _Ug1Ligada = false;
        private static bool _Ug2Ligada = false;
    
        public static void LigaUg1()
        {
            _Ug1Ligada = true;
        }
        public static void DesligaUg1()
        {
            _Ug1Ligada = false;
        }
        public static void LigaUg2()
        {
            _Ug2Ligada = true;
        }
        public static void DesligaUg2()
        {
            _Ug2Ligada = false;
        }
    
        public static bool Ug1Ligada => _Ug1Ligada;
        public static bool Ug2Ligada => _Ug2Ligada;
    }

    Mais isso é apenas uma sugestão.

    Outra dúvida que surgiu é?

    Você está selecionando os dados cbUg com o mouse, ou com a seta do teclado?

    Falo isso por que se for com a seta do teclado, obviamente estará passando por todos critérios que você escreveu, sendo assim alterando os valores já disponíveis.

    Existe mais informações que não conseguiu colocar aqui?


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    Rafael Almeida
    Microsoft Developer .NET
    Microsoft Certified Professional
    Development Leader at JAMSOFT Informática
    Email: ralms@ralms.net
    Blog -  GitHub  -  LinkedIn -  Twitter


    domingo, 28 de janeiro de 2018 15:38

Todas as Respostas

  • Isto é um projeto Windows Forms?

    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    quarta-feira, 24 de janeiro de 2018 10:15
  • Sim Juliano, é um projeto Windows Forms
    domingo, 28 de janeiro de 2018 10:32
  • Olá Emerson Tudo bem?

    Bom primeiramente um sugestão, já que as propriedade Ug1Ligada e Ug2Ligada são manipuladas por métodos, então eu criaria propriedades estáticas privadas e deixaria Ug1Ligada Ug2Ligada apenas para recuperar os valores estáticos.

    Então eu deixaria minha classe assim:

    public static class ValidaCampos
    {
        private static bool _Ug1Ligada = false;
        private static bool _Ug2Ligada = false;
    
        public static void LigaUg1()
        {
            _Ug1Ligada = true;
        }
        public static void DesligaUg1()
        {
            _Ug1Ligada = false;
        }
        public static void LigaUg2()
        {
            _Ug2Ligada = true;
        }
        public static void DesligaUg2()
        {
            _Ug2Ligada = false;
        }
    
        public static bool Ug1Ligada => _Ug1Ligada;
        public static bool Ug2Ligada => _Ug2Ligada;
    }

    Mais isso é apenas uma sugestão.

    Outra dúvida que surgiu é?

    Você está selecionando os dados cbUg com o mouse, ou com a seta do teclado?

    Falo isso por que se for com a seta do teclado, obviamente estará passando por todos critérios que você escreveu, sendo assim alterando os valores já disponíveis.

    Existe mais informações que não conseguiu colocar aqui?


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    Rafael Almeida
    Microsoft Developer .NET
    Microsoft Certified Professional
    Development Leader at JAMSOFT Informática
    Email: ralms@ralms.net
    Blog -  GitHub  -  LinkedIn -  Twitter


    domingo, 28 de janeiro de 2018 15:38
  • Emerson,

    Se todas as propriedades da sua classe ValidaCampos for estática, coloque também a sua classe como static.

    Não tenho como simular o erro pra saber o real problema, mas não custa tentar.

    Abç!

    domingo, 28 de janeiro de 2018 17:44

  • Vou fazer alguns testes com esse método e depois posto o resultado, estou em turno agora....
    segunda-feira, 29 de janeiro de 2018 09:45
  • Então Bernard, não ocorre nenhum erro, ele apenas altera o valor das duas variáveis quando eu altero uma....mas eu tinha tentado colocar a propriedade de minha classe como estática...gostaria de entender o que está acontecendo nesta situação
    segunda-feira, 29 de janeiro de 2018 09:47
  • Fiz desta forma e novamente quando ligo uma das unidades ela atribui true para as duas variaveis....vou rever meu código, mas nao encontro nada que faça com que as duas unidades recebam true caso eu altere apenas uma.....nao estou entendendo o que se passa...
    quarta-feira, 31 de janeiro de 2018 21:55
  • Olá Emerson Tudo bem?

    Bom primeiramente um sugestão, já que as propriedade Ug1Ligada e Ug2Ligada são manipuladas por métodos, então eu criaria propriedades estáticas privadas e deixaria Ug1Ligada Ug2Ligada apenas para recuperar os valores estáticos.

    Então eu deixaria minha classe assim:

    public static class ValidaCampos
    {
        private static bool _Ug1Ligada = false;
        private static bool _Ug2Ligada = false;
    
        public static void LigaUg1()
        {
            _Ug1Ligada = true;
        }
        public static void DesligaUg1()
        {
            _Ug1Ligada = false;
        }
        public static void LigaUg2()
        {
            _Ug2Ligada = true;
        }
        public static void DesligaUg2()
        {
            _Ug2Ligada = false;
        }
    
        public static bool Ug1Ligada => _Ug1Ligada;
        public static bool Ug2Ligada => _Ug2Ligada;
    }

    Mais isso é apenas uma sugestão.

    Outra dúvida que surgiu é?

    Você está selecionando os dados cbUg com o mouse, ou com a seta do teclado?

    Falo isso por que se for com a seta do teclado, obviamente estará passando por todos critérios que você escreveu, sendo assim alterando os valores já disponíveis.

    Existe mais informações que não conseguiu colocar aqui?


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    Rafael Almeida
    Microsoft Developer .NET
    Microsoft Certified Professional
    Development Leader at JAMSOFT Informática
    Email: ralms@ralms.net
    Blog -  GitHub  -  LinkedIn -  Twitter


    Pessoal boa tarde, vou até pedir desculpas mas o que estava acontecendo era mesmo um erro em minha lógica, agradeço a todos pela a ajuda mas revendo meu código percebí que tinha sido apenas um erro de digitação.

    Obrigado pessoal e em especial ao Rafael Almeida

    quinta-feira, 1 de fevereiro de 2018 20:08
  • Pessoal boa tarde, vou até pedir desculpas mas o que estava acontecendo era mesmo um erro em minha lógica, agradeço a todos pela a ajuda mas revendo meu código percebí que tinha sido apenas um erro de digitação.

    Obrigado pessoal e em especial ao Rafael Almeida

    quinta-feira, 1 de fevereiro de 2018 20:08