Ir para conteúdo
_marlon307

[RESOLVIDO] C# Referência de objeto não definida para uma instância de um objeto

Recommended Posts

Estou usando um pacote de interface para meu software. O problema e quando eu vou mudar o estilo do software ele me retorna o erro Referência de objeto não definida para uma instância de um objeto na seguinte linha ThemeForm.Style = (MetroColorStyle)Tag; não tenho ideia de que possa ser já que eu baixei um exemplo para ver melhor e não vi nada de diferente

Este e o código.

 

https://mega.nz/#!E9wlCAAR!zs0-R8yWwl5qw0aKlwQH_tRs7hHLiD7w9fSguDKDGlU

using System;
using System.Drawing;
using MetroFramework;
using MetroFramework.Controls;
using MetroFramework.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : MetroForm
    {
        public Form1()
        {
            InitializeComponent();

            this.StyleManager = ThemeForm;

            for (int i = 3; i < 13; i++)
            {
                MetroTile _tile = new MetroTile
                {
                    Size = new Size(30, 30),
                    Tag = i,
                    Style = (MetroColorStyle)i
                };
                _tile.Click += _tile_Click;
                flowLayoutPanel1.Controls.Add(_tile);
            }
        }
        void _tile_Click(object sender, EventArgs e)
        {
            ThemeForm.Style = (MetroColorStyle)Tag;
        }
        private void MetroRadioButton1_CheckedChanged(object sender, EventArgs e)
        {
            if(metroRadioButton1.Checked)
            {
                ThemeForm.Theme = MetroThemeStyle.Dark;
            }
        }
        private void MetroRadioButton2_CheckedChanged(object sender, EventArgs e)
        {
            if (metroRadioButton2.Checked)
            {
                ThemeForm.Theme = MetroThemeStyle.Light;
            }
        }
    }
}
Link do projeto
https://mega.nz/#!E9wlCAAR!zs0-R8yWwl5qw0aKlwQH_tRs7hHLiD7w9fSguDKDGlU

2018-04-22.png

Compartilhar este post


Link para o post
Compartilhar em outros sites
3 horas atrás, quintelab disse:

A variável ThemeForm foi instanciada ? Tem valor ?

ThemeForm e um objeto de controle do form. Ele e o responsável por controlar a aparência do form

Compartilhar este post


Link para o post
Compartilhar em outros sites
5 minutos atrás, quintelab disse:

Acabei de ler a mensagem de erro novamente e reparei que o objeto Tag esta nulo. De onde vem esse Tag ?

Ele vem do  Membro de System.Windows.Forms.Control  public object Tag { get; set; }
 

Compartilhar este post


Link para o post
Compartilhar em outros sites
24 minutos atrás, quintelab disse:

Provavelmente você tem que passar algum valor pra essa variável antes de usar.

Mas nessa parte do código devia estar pegando um valor. 

for (int i = 3; i < 15; i++)
            {
                MetroTile _tile = new MetroTile
                {
                    Size = new Size(30, 30),
                    Style = (MetroColorStyle)i,
                    Tag = i // Aqui ele pega o valor
                };
               
                _tile.Click += _tile_Click;
                flowLayoutPanel1.Controls.Add(_tile);
            }

Pegando o valor ele esta, mas não esta passando o valor para a função abaixo.

Compartilhar este post


Link para o post
Compartilhar em outros sites
8 minutos atrás, quintelab disse:

Não necessariamente, o Tag nesse caso é uma propriedade do objeto MetroTile. Você teria que acessar primeiro o MetroTile pra em seguida acessar a propriedade Tag.

Me de um exemplo porque não faço ideia de como e?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sem ter o código pra debugar é um pouco complexo, mas eu começaria tentando algo do tipo:

 

void _tile_Click(object sender, EventArgs e)
{
    MetroTile _tile = (MetroTile) sender;
    ThemeForm.Style = _tile.Tag;
}

 

  • Obrigado! 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
7 horas atrás, quintelab disse:

Sem ter o código pra debugar é um pouco complexo, mas eu começaria tentando algo do tipo:

 


void _tile_Click(object sender, EventArgs e)
{
    MetroTile _tile = (MetroTile) sender;
    ThemeForm.Style = _tile.Tag;
}

 

 

Consegui fazendo dessa forma e deu certo. Vlw pela ajuda

ThemeForm.Style = (MetroColorStyle)((MetroTile)sender).Tag;

 

  • +1 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por laumello12
      Galera ajudinha
      Como faço para consumir um web service pronto em um projeto. Preciso só que ele busque no web service e traga na web 
      HELP
    • Por ValérinhaSilva255
      Precisamos criar um teatro, onde utilizaremos os conceitos de uma matriz em C#. Esta matriz, deverá ter, no máximo, 150 lugares.

      O programa deverá reservar uma poltrona, cobrando para isso do usuário 40% do valor total do ingresso, que deverá ser informado na tela inicial do programa.

      Quando ocupada uma poltrona, o usuário poderá pagar 60% ou 100% do valor total (caso esteja ou não reservada anteriormente). No caso de desmarcação de reserva, deverá ser devolvido 50% do valor da reserva (portanto, 20% do valor total do ingresso).

      O programa poderá ocupar, reservar, liberar poltronas.
      Um espetáculo somente poderá acontecer se a arrecadação total for maior ou igual a 51% do valor total do teatro. 

      Quando o teatro for fechado, pede-se para que se informe:
      Total de Lugares reservados: XX
      Valor total das reservas: R$00,00
      Total de Lugares Ocupados: YY
      Valor total de Ocupantes: R$00,00
      Total de Lugares Livres: ZZ

      Mínimo para realização do Evento: R$999,99. Valor Total Arrecadado: R$989,00
      Se o valor arrecadado for MAIOR que 51% do mínimo para realização, deverá ACONTECER o espetáculo, caso contrário, mostrar quantos locais ainda precisariam ser ocupados, da seguinte forma: Precisaríamos de 10 lugares Ocupados ou 30 lugares reservados para que o espetáculo pudesse ocorrer.

      O visitante deverá ter o “mapa” de cadeiras a sua disposição.

      O visitante irá escolher sua posição informando fileira e cadeira desejada.
      EXEMPLO DE EXECUÇÃO
      PREÇO DO INGRESSO: R$100,00

      ***** ***** ****** Mapa do Teatro ***** ***** *****

      0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
      0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
      0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
      0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
      0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
      0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
      0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
      0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
      0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
      0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

      ***** ***** ****** Mapa do Teatro ***** ***** *****

      O que você deseja fazer?
      [0] - Finalizar o programa
      [1] - Abrir Espetáculo
      [2] - Reservar uma poltrona
      [3] - Liberar poltrona reservada
      [4] - Vender poltrona
      [7] - Finalizar vendas
      [9] - Parciais do Espetáculo

      Resumo das Operações:
      0 - Finaliza o programa e retorna para o sistema operacional.
      1 - Libera a sala do teatro, para que o programa possa ser executado outras vezes, para outros espetáculos (Zera todas as variáveis).
      2 - Reservar poltrona (Cobrar 40% do valor do ingresso)
      3 - Liberar poltrona reservada (Devolve 20% do valor do ingresso)
      4 - Vender poltrona (Recebe valor integral do ingresso - 100%)
      7 - Finalizar vendas (listar todos os resultados)
      9 - Parciais (saber quanto esta pago em cada situação. Reservas, vendas, etc.) Pode ser solicitado a qualquer momento.
    • Por Fiori
      Eu, estou cursando SI, e estou no primeiro semestre, o professor passou uma lista de exercícios, consegue resolver todos mas quando cheguei nesse não consigo resolver.
      O exercício é esse:  "Entrar via teclado com o sexo de determinado usuário, aceitar somente “F” ou “M” como respostas válidas.".
      Independente se a resposta for "F", "f", "M", "m" ou qualquer outra o loop do Do se repete. Oque preciso fazer para acontecer o if?
      string genero; Console.Clear(); Console.WriteLine("Caso seja mulher, digite [F]."); Console.WriteLine("Caso seja homem, digite [M]."); genero = Console.ReadLine(); do { Console.WriteLine("Valor invalido."); Console.WriteLine("Digite [F] ou [M]."); genero = Console.ReadLine(); } while (genero != "F" || genero != "M"); if (genero == "F" || genero == "M") { Console.WriteLine("Esse valor foi aceito."); Console.ReadKey(); }
       
    • Por Jonathacsantos
      Boa tarde, sou novo na programação, comecei por conta própria e agora estou com um pequeno problema, meu programa depende de uma pasta criada pra executar um .exe que fica dentro de uma outra pasta, sendo que eu preciso que ele leia o .exe independente de onde ele fica instalado, vou mostrar uma parte do código para tentar explicar 
      private void AcessRemo_Click(object sender, EventArgs e) { foreach ( var process in Process.GetProcessesByName("TeamViewer")) { process.Kill(); } Process.Start("C:\\Teste\\suporteremoto.exe"); ele fecha um teamviewer em execução e executa uma versão especifica do teamviewer, sendo que nos meus testes funciona pq eu tenho essa pasta ai chamada teste, mas o programa instala em Program Files, sendo que se for 64, ele vai pra Program Files (x86), dai gostaria de fazer ele ler, tipo um [LocalPath] , mas não sei como , se alguem puder me ajudar ou me da uma luz eu agradeço muito.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.