STRUCT COM ARRAY

CLEVERTON 10/04/2014 01:39:53
#437106
Pessoal, venho aqui mais uma vez pedir um help. coisa boba eu acho

Então, eu não consigo declarar um array de um Struct, fica dando o seguinte erro
Citação:

[txt-color=#e80000]Referência de objeto não definida para uma instância de um objeto.[/txt-color]




namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{

public struct Minha
{
public int a;
public int b;
}

public Minha[] myvar;


public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
myvar[0] = new Minha();
}
}
}
TUNUSAT 10/04/2014 08:22:21
#437110
CLEVERTON,

O código acima funcionou normalmente na minha máquina...
... será que está faltando algum referência?

[][ô]s,
Tunusat.
TUNUSAT 10/04/2014 09:07:27
#437115
CLEVERTON,

Anexei o projeto inteiro aqui.
Por favor, veja.

[][ô]s,
Tunusat.
KERPLUNK 10/04/2014 09:19:02
#437117
Resposta escolhida
Porque ao invés de array, onde você deve controlar posicionamentos e toda essa trabalheira, você não usa List<Minha>:


namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{

public struct Minha
{
public int a;
public int b;
}

public List<Minha> myvar = new List<Minha>();


public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
myvar.Add(new Minha());
}
}
}


Então, quando e se precisar que seja mesmo um array, você pode fazer a conversão:

myvar.ToArray();
CLEVERTON 10/04/2014 10:18:33
#437125
TUNUSAT
O Código no VS2013 funciona beleza, mas eu uso o 2008, será que o problema está referido a alguma versão do framework ?


KERPLUNK
Desta forma funciona de boa, mas porque será que funciona no VS2013 o mesmo código que eu passei lá em cima ? será alguma referência faltando ?



private void button1_Click(object sender, EventArgs e)
{
Minha mystru;

mystru.a = 1; mystru.b = 2;

myvar.Add(mystru);

MessageBox.Show(myvar[0].b.ToString());
}


TUNUSAT 10/04/2014 11:00:22
#437131
CLEVERTON,

Eu estou usando VS2010.
Segundo o site da Microsoft MSDN:
Versões e dependências do .NET Framework

A diferença é que o VS2008 usa o framework 3.5 e o VS2010 o framework 4.0.
[Ô]Nova versão do CLR introduzida, bibliotecas de classe de base expandida e novos recursos como a Managed Extensibility Framework (MEF), tempo de execução de linguagem dinâmica (DLR) e contratos de código.[Ô]

Mas ai até que ponto influencia no seu caso ... não sei ...

[][ô]s,
Tunusat.
KERPLUNK 10/04/2014 11:24:39
#437134

private void button1_Click(object sender, EventArgs e)
{
Minha mystru;

mystru.a = 1; mystru.b = 2;

myvar.Add(mystru);

MessageBox.Show(myvar.[txt-color=#e80000]ToArray()[/txt-color][0].b.ToString());
}



Como eu disse, quando precisar usar sua lista como array, use o método ToArray()
OCELOT 10/04/2014 11:44:01
#437136
O seu código não deve funcionar independente da versão do VS.Net ou Framework usado, se funcionou em algum outro então você fez algo de diferente

O seu problema ali é o seguinte, você declarou a variável

public Minha[] myvar;

Ela está apenas declarada, nunca foi inicializada com valor nenhum, logo ela é nula

Então você tenta acessar a posição 0 do array e tenta atribuir um valor a ele

myvar[0] = new Minha();

o problema ai é que myvar ainda não foi instanciado, ele é null e ao tentar acessar ele ocorre uma NullReferenceException, o que você precisa fazer é instanciar o array antes de usar, o mais simples seria na hora de declarar a variável por exemplo

public Minha[] myvar = new Minha[10];

Assim você estaria criando um array com 10 posições (0 a 9), cabe ai a você saber quantas posições precisa dentro deste array, mas o ideal mesmo ainda acho que seria usar o List<T> como o KERPLUNK falou
JABA 10/04/2014 14:16:15
#437150
Para complementar o que os colegas colocaram, por que você não usa um Point no lugar do Struct?

Por exemplo:

public Point[] myvar = new Point[10];

private void Form1_Load(object sender, EventArgs e)
{
myvar[0] = new Point(a, b);
}
FOXMAN 10/04/2014 15:55:07
#437154
Citação:

:
CLEVERTON,

O código acima funcionou normalmente na minha máquina...
... será que está faltando algum referência?

[][ô]s,
Tunusat.


Tuna, aki também, mas se vc colocar um breakpoint no load do form ele nem está passando.

Mas não acusou erro nenhum tbem.

TUNUSAT 10/04/2014 16:30:51
#437159
FOXMAN,

Vixe! Fui olhar ... coloquei um breakpoint na linha:

myvar[0] = new Minha();


E ele pára nesta linha ... mas as linhas abaixo que eu coloquei ele NÃO passa! E não mostra o box de mensagem!

            myvar[0].a = 1;
MessageBox.Show([Ô]Letra A: [Ô] + myvar[0].a);
myvar[0].b = 2;


Será que ele pula e não fala nada?!? Não dá mensagem de erro ... vou experimentar colocar um [Ô]TRY[Ô].

        private void Form1_Load(object sender, EventArgs e)
{
try
{
myvar[0] = new Minha();
myvar[0].a = 1;
MessageBox.Show([Ô]Letra A: [Ô] + myvar[0].a);
myvar[0].b = 2;
}
catch (Exception ex)
{
MessageBox.Show([Ô]Mensagem: [Ô] + ex.Message);
}
}


Caramba! Caiu no [Ô]catch[Ô] ... mancada minha!
Xiii ... falei besteira ... apareceu a mensagem agora:

Citação:

---------------------------

---------------------------
Mensagem: Object reference not set to an instance of an object.
---------------------------
OK
---------------------------



Desculpa aê gente! Foi malz aê...
Yoda acabou de falar aqui: [Ô]Pesquisar mais preciso é.[Ô]

[][ô]s,
Tunusat.
Página 1 de 2 [11 registro(s)]
Tópico encerrado , respostas não são mais permitidas