Jump to content
_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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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; }
 

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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?

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By rdavisp
      Senhores, bom dia.
      Mais uma vez recorro a ajuda de vocês para algo que não domino ainda. Vamos lá!
      Tenho uma API que quando startada, ela sobe no seguinte endereço: http://localhost:49013/api/values. Percebi que isto é parametrizado no arquivo launchSettings.json, que está assim:
       
      {   "iisSettings": {     "windowsAuthentication": false,     "anonymousAuthentication": true,     "iisExpress": {       "applicationUrl": "http://localhost:49013/",       "sslPort": 0     }   },   "profiles":    {     "IIS Express": {       "commandName": "IISExpress",       "launchBrowser": true,       "launchUrl": "api/values",       "environmentVariables": {         "ASPNETCORE_ENVIRONMENT": "Development"       }     },     "Cliente.IG.WebAPI": {       "commandName": "Project",       "launchBrowser": true,       "launchUrl": "api/values",       "environmentVariables": {         "ASPNETCORE_ENVIRONMENT": "Development"       },       "applicationUrl": "http://localhost:49012/"     }   } }  
      No meu controller da API, tenho seguinte método dentro do namespace:
       
          [Produces("application/json")]     [Route("api/IG")]     [ApiController]     public class IGController : Controller     {         [HttpPost]         public IGResult Post([FromBody] Filtro filtro)         {             var app = new IgApplication();             return app.getInstrucoes(filtro);         }     }  
      O "IgApplication" cria uma instância da classe onde é gerado uma lista que é populada com os valores atribuídos do DAO.
       
      Quando inicializo a aplicação "A" em angular através do localhost (http://localhost:4200/). Dentro do meu arquivo environment.prod.ts tenho a chamada:
       
      export const environment = {   production: true,   url: 'http://localhost:49013/' };  
      Ela passa por esse controller e segue o fluxo e faz o que tem que ser feito. 
      Porém, eis a questão! Eu possuo a aplicação "B", que acessa a mesma API porém possui funcionalidades diferente, por isso, dentro do mesmo controller eu criei uma nova classe e um método:
       
          [Produces("application/json")]     [Route("api/Item")]     public class APIIgItemController : Controller     {         [HttpGet]         public ItensResult Post([FromBody] Itens ValorItem)         {             var app = new CRUDApplication();             return app.GetItens();         }     }  
      Como faço para quando for startar a aplicação "B", ele passe por esse método "ItensResult" ao invés "IGResult", sendo que ambas são executadas pelo localhost:4200? Ou isso eu defino na aplicação angular? Vi que é possível configurar mais de uma "applicationUrl" dentro do json. Devo considerar essa configuração?
       
      Grato a quem puder ajudar!
       
    • By Good
      Boa noite,
       
      para um sistema que é muito acessado uma página básica, mas que sempre faz conexão com banco de dados apenas para ler uma informação que já é fixada, é muito raro ter uma atualização.
       
      Então, pensando em economizar e acelerar o site, pensei nestas maneiras:
       
      1. Já uso cloudflare, e ele guarda no cachê algumas informações. Pensei em gravar as informações em TXT, e sempre usar um file_get_contents (através de uma url) para ler as informações. Será que essas informações entrarão em cachê no cloudflare e poupará mais do servidor?
      2. Então usar apenas cloudflare e puxar a informação de forma local.
      3. Manter a conexão com banco de dados a cada acesso de um usuário
       
       
      Qual das 3 opções seria mais viável para milhares de conexões diárias?
    • By jurandyneto
      Pessoal alguém pode me ajudar?
       
      A nota da prova final tá saindo errado
      #include <stdio.h> #include <stdlib.h> int main(void) { float primeiraNota, segundaNota, terceiraNota; float media, notaDaProvaFinal; printf("\n\t\tCalculo da Nota Final.\n\n"); primeiraNota = -1; while ((primeiraNota < 0) || (primeiraNota > 10)) { printf(" Primeira Nota.: "); scanf("%f", &primeiraNota); } segundaNota = -1; while ((segundaNota < 0) || (segundaNota > 10)) { printf(" Segunda Nota..: "); scanf("%f", &segundaNota); } terceiraNota = -1; while ((terceiraNota < 0) || (terceiraNota > 10)) { printf(" Terceira Nota.: "); scanf("%f", &terceiraNota); } media = (primeiraNota + segundaNota + terceiraNota) / 3; printf("\n\n\tMedia: %.2f\n\n", media); if (media >= 7) printf("\tAPROVADO!\n\n"); if(media >= 3 && media <= 6.9){ printf("\tREPROVADO - COM DIREITO A PROVA FINAL!\n"); notaDaProvaFinal = (media * 7) - 50 /3; printf("\tNota minima a ser tirada na prova final: %.1f\n\n", notaDaProvaFinal); } if (media < 4) printf("\tREPROVADO - SEM DIREITO A PROVA FINAL!\n\n"); system("pause"); return 0; }  
    • By Lucaahenr
      Boa tarde pessoal!

      Tenho que fazer um programa em C# que realize o calculo de uma equação de 2° Grau, porem é necessário realizar algumas verificações utilizando IF,  Else e estou tendo dificuldade em realizar estas verificações, gostaria de saber se está correto o que eu fiz ou se tem algum outro modo, segue questão em anexo.

      Muito Obrigado!

      using System; namespace equacaoSegundoGrau { class equacacao { static void Main(string[] args) { double a, b, c, delta; Console.WriteLine("Informe o coeficiente A"); a = double.Parse(Console.ReadLine()); Console.WriteLine("Informe o coeficiente B"); b = double.Parse(Console.ReadLine()); Console.WriteLine("Informe o coeficiente C"); c = double.Parse(Console.ReadLine()); // mesma coisa que a de baixo delta = (b * b) - 4 * a * c; delta = Math.Pow(b, c) - 4 * a * c; if ((a == 0) && (b == 0) && (c != 0)) { Console.WriteLine("Coeficientes informados incorretamente."); } else if ((a == 0) && (b != 0)) { Console.WriteLine("Essa é uma equação de primeiro grau e deverá ser informado o valor da raiz real da equação."); } else if (delta < 0) { Console.WriteLine("Esta equação não possui raízes reais"); } else if (delta == 0) { Console.WriteLine("Esta equação possui duas raízes reais iguais e informar o valor das raízes da equação." + delta); } else if (delta > 0) { Console.WriteLine("Esta equação possui duas raízes reais diferentes."); Console.WriteLine("O valor desta equação é " + delta); } } } }
       
    • By Eduardo Cândido da Rosa
      Boa noite da lista de 30 por enquanto foram 2 os problemas que não consegui entender o enunciado ou não consegui realmente resolver...
       
      Gostaria da ajuda de vocês para resolver esse enunciado em C++, não vou postar o que fiz pois não consegui formular uma resposta adequada espero que ajudem.
       
      27)    A locadora de carros SAI DA FRENTE está fazendo uma promoção e está alugando carros no período junino por R$ 30,00 a diária. Além disso, a locadora cobra R$ 0,01 por quilômetro rodado. Como é período de São João, a locadora quer fidelizar os clientes e está dando 10% de desconto no valor total do aluguel de qualquer carro.
       
      Implemente um programa em C++ que leia quantos dias a pessoa ficou com o carro: [1; 30] e quantos quilômetros ela rodou [1; 1000], calcule e mostre o valor total que a pessoa deve pagar pelo aluguel do carro.
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.