Laden...

Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt

Erstellt von MarcDirk vor 10 Jahren Letzter Beitrag vor 10 Jahren 4.935 Views
Thema geschlossen
M
MarcDirk Themenstarter:in
5 Beiträge seit 2013
vor 10 Jahren
Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt

Hallo,

für ein Projekt habe ich eine Klasse erzeugt:


public class TabPicture
{
    public SourceInfo Ursprungsbild;
    public ProcessedInfo Arbeitskopie;
    
    public int TrackBarValue { get; set; }
    public double Seitenverhältnis { get; set; } 
    public string Format { get; set; } 
    public Boolean image_changed { get; set; }
    
    public class SourceInfo
    {
        public Image Bild { get; set; }
        public int Dateigröße { get; set; }
        public int Breite { get; set; }
        public int Höhe { get; set; }
    }
    
    public class ProcessedInfo
    {
        public Image Bild { get; set; }
        public int Dateigröße { get; set; }
        public int Breite { get; set; }
        public int Höhe { get; set; }
    }
}

Im Anschluss erzeuge ich ein List-Objekt von meiner Klasse

List<TabPicture> TabBild; 

welche ich dann wie folgt zu füllen glaubte:

for (int x = 0; x < 13; x++)
{
    TabPicture TabPicture1 = new TabPicture();
    TabPicture1.Ursprungsbild.Bild = CreateEmptyBitmap();
    TabPicture1.Ursprungsbild.Breite = 0;
    TabPicture1.Ursprungsbild.Höhe = 0;
    TabPicture1.Ursprungsbild.Dateigröße = 0;
    TabPicture1.Arbeitskopie.Bild = TabPicture1.Ursprungsbild.Bild;
    TabPicture1.Arbeitskopie.Breite = 0;
    TabPicture1.Arbeitskopie.Höhe = 0;
    TabPicture1.Arbeitskopie.Dateigröße = 0;
    TabPicture1.Format = "";
    TabPicture1.image_changed = false;
    TabPicture1.Seitenverhältnis = 0;
    TabPicture1.TrackBarValue = 0;
    TabBild.Add(TabPicture1);
}

Richtig geraten, es klappt nicht und ich werde mal wieder irre 🙁 daran!
Es gibt keinen Syntaxfehler.
Ich kann meine Klasse z.B. so ansprechen:

TabBild[1].Ursprungsbild.Bild = NewImage;

Aber bei der Compilierung bleibt er schon oben bei der ersten Zuweisung in der Schleife hängen.> Fehlermeldung:

Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

Kann mir jemand helfen meinen Irrtum zu sehen bzw. zu verstehen?

Marc

190 Beiträge seit 2012
vor 10 Jahren

Hast du nur List<TabPicture> TabBild; stehen?
Es müßte ja auch List<TabPicture> TabBild = new List<TabPicture> (); heißen.
Wie sieht denn die genaue Fehlermeldung aus?

  • Wer lesen kann, ist klar im Vorteil
  • Meistens sitzt der Fehler vorm Monitor
  • "Geht nicht" ist keine Fehlermeldung!
  • "Ich kann programmieren" != "Ich habe den Code bei Google gefunden"

GidF

C
112 Beiträge seit 2009
vor 10 Jahren

TabPicture1.Ursprungsbild.Bild = CreateEmptyBitmap(); -> Wo erzeugst Du eine Instanz von Ursprungsbild? In Deinem Beispiel ist Ursprungsbild NULL

309 Beiträge seit 2008
vor 10 Jahren

Die Felder müssen mit new initialisiert werden, auch wenn es innere Klassen sind.

Das kannst du entweder gleich bei der defintion machen:



public SourceInfo Ursprungsbild = new SourceInfo();
 public ProcessedInfo Arbeitskopie = new ProcessedInfo();

oder du initialisierst sie in einem Konstruktor:


public TabPicture()
{
   this.Ursprungsbild = new SourceInfo();
   this.Arbeitskopie = new ProcessedInfo();
}

Aber ich denke du hast OOP noch nicht richtig verstanden . Daher der Hinweis auf [Hinweis] Wie poste ich richtig? Punkt 1.1 1.1.1

Warum hast du zwei Klassen die exakt gleich aufgebaut sind SourceInfo und ProcessedInfo?
Du brauchst nur eine Klasse:

z.B:


 public ImageInfo SourceInfo = new ImageInfo();
 public ImageInfo ProcessedInfo = new ImageInfo();


public class ImageInfo
{
    public Image Bild { get; set; }
    public int Dateigröße { get; set; }
    public int Breite { get; set; }
    public int Höhe { get; set; }
}
using System;class H{static string z(char[]c){string r="";for(int x=0;x<(677%666);x++)r+=c[
x];return r;}static void Main(){int[]c={798,218,229,592,232,274,813,585,229,842,275};char[]
b=new char[11];for(int p=0;p<((59%12));p++)b[p]=(char)(c[p]%121);Console.WriteLine(z(b));}}

M
MarcDirk Themenstarter:in
5 Beiträge seit 2013
vor 10 Jahren

Es hat lange gedauert, aber der Groschen ist gefallen!
DANKE!!!

public class TabPicture
        {
            public SourceInfo Ursprungsbild = new SourceInfo();
            public ProcessedInfo Arbeitskopie = new ProcessedInfo();
            public int TrackBarValue { get; set; }
            public double Seitenverhältnis { get; set; } // Höhe dividiert durch Breite
            public string Format { get; set; } // Kompressionsstandard
            public Boolean image_changed { get; set; }
            public class SourceInfo
            {
                public Image Bild { get; set; }
                public int Dateigröße { get; set; }
                public int Breite { get; set; }
                public int Höhe { get; set; }
            }
            public class ProcessedInfo
            {
                public Image Bild { get; set; }
                public int Dateigröße { get; set; }
                public int Breite { get; set; }
                public int Höhe { get; set; }
            }
        }
        List<TabPicture> TabBild = new List<TabPicture>();

Hinweis von herbivore vor 10 Jahren

Bitte beachte [Hinweis] Wie poste ich richtig? Punkt 1.1.1 und 1.1. Letzteres schon alleine, weil es eine direkt passenden FAQ gibt, siehe [FAQ] NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt [finden und beheben].

Thema geschlossen