Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt
MarcDirk
myCSharp.de - Member



Dabei seit:
Beiträge: 5

Themenstarter:

Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt

beantworten | zitieren | melden

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.
Fehler
Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

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

Marc
private Nachricht | Beiträge des Benutzers
Wilfried
myCSharp.de - Member

Avatar #2TnJ7IKlYXgOor5sZSIA.jpg


Dabei seit:
Beiträge: 140
Herkunft: Radeberg

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
chriscolm
myCSharp.de - Member



Dabei seit:
Beiträge: 112

beantworten | zitieren | melden

TabPicture1.Ursprungsbild.Bild = CreateEmptyBitmap(); -> Wo erzeugst Du eine Instanz von Ursprungsbild? In Deinem Beispiel ist Ursprungsbild NULL
private Nachricht | Beiträge des Benutzers
Scavanger
myCSharp.de - Member

Avatar #avatar-3209.jpg


Dabei seit:
Beiträge: 309

beantworten | zitieren | melden

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; }
}
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Scavanger am .

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));}}
private Nachricht | Beiträge des Benutzers
MarcDirk
myCSharp.de - Member



Dabei seit:
Beiträge: 5

Themenstarter:

beantworten | zitieren | melden

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>();
private Nachricht | Beiträge des Benutzers

Moderationshinweis von herbivore (06.10.2013 - 17:51)

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].