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 fernandoxwiggy
      Bom dia,
      Alguém já teve que desenvolver o CIOT da empresa E-frete em C#?
       
      Estou buscando exemplos de como fazer usando o web service deles (http://dev.efrete.com.br/Services/LogonService.asmx).
      Eu acredito que preciso chamar o "login" (depois o logout) dentro desse web service, mas ele é uma interface e não estou achando um exemplo de chamar um procedimento em um web service que seja um interface.
       
      Agradeço desde já se alguém puder ajudar.
    • By User386_Denilson
      e aí pessoal, blz?
       
      Vou colocar aqui minha duvida...
      Tenho um projeto em net Core 2.2, usadon mongodb. Tenho uma collection antiga (Pessoas) que o pessoal foi alimentado com muita coisa, e agora estou organizando em pessoa fisica e pessoa juridica.
      Eu faço a busca usando o filtro por id:
      public async Task<PessoaDadosCad> GetPessoaFisica(string id) { var pessoa = await passaiMongoCollection.FindAsync(pessoa => pessoa.Id == id); var data = JsonConvert.SerializeObject(await pessoa.FirstOrDefaultAsync()); PessoaDadosCad simplifiedPerson = JsonConvert.DeserializeObject<PessoaDadosCad>(data.ToString()); return simplifiedPerson; }  
      (pessoa => pessoa.Id == id) ao executar esse comando de busca, a classe vinculada é Pessoa.
      Eu queria ver com vcs se tem como não vincular uma classe no momento da busca??
      Obrigado
    • 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; }  
×

Important Information

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