Autor Beitrag
Foxi23
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Fr 29.01.10 18:59 
Hallo,
Ich möchte ein Programm schreiben, daß Vectorgrafik enthalten soll.
Hierzu währe es günstig, wenn ich die verschiedenen Grafik-Objekte in einer Liste verwalten könnte. Meine Datenstruktur sieht etwa so aus:
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
public class CGraficObjekt
    {
        protected int Objektart;
        protected Point p1, p2, p3, p4;
        protected int breite, hoehe;
        protected Pen linien = new Pen(Color.DarkGray);
        protected SolidBrush fuellungFarbe = new SolidBrush(Color.Red);
        protected long anfanszeit;
        protected int legende;
    }
    
    public class CLinie : CGraficObjekt
    {
        public int pfeil1, pfeil2; 
    }
    
    public class CFlaesche : CGraficObjekt
    {
        public Point TextEinfügepunkt;
        public enum EFlArt : byte { Rechteck = 0, Kreis, Dreieck , Elypse };
        public Font schrift = new Font("Arial"9); 
    }
    
    public class CText : CGraficObjekt
    {
        public int pfeil1, pfeil2;
        public Font schrift = new Font("Arial"9); 
    }
    
    public class CBild : CGraficObjekt
    {
        public Image bild;
    }
    
    public class CPolylinie : CGraficObjekt
    {
        public Point [] punkte = new Point [99];
    }

Also eine Basis-Classe und dann verschiedene Grafikobjekte, die von der Basis-Classe abgeleitet sind.
Frage: geht das, das man die in einer Liste verwalten kann.

Ich dachte mir so, aber das gibt eine Fehlermeldung
ausblenden C#-Quelltext
1:
public static System.Collections.Generic.List<CLinie, CBild, CFlaesche, CPolylinie, CText> objektliste = new System.Collections.Generic.List<CLinie, CBild, CFlaesche, CPolylinie, CText>();					

So das man beim einlesen das Feld Objektart ausliest, und dann mit der passenden Objekt-Classe weiter ausliest (Entschuldigung für das 3x lesen/liest)

Währe auch dankbar für einen Tipp, wenn ich hier einen völlig falschen "Ansatz" habe.

bis dann
Foxi23
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Fr 29.01.10 19:11 
user profile iconFoxi23 hat folgendes geschrieben Zum zitierten Posting springen:
Also eine Basis-Classe und dann verschiedene Grafikobjekte, die von der Basis-Classe abgeleitet sind.
Frage: geht das, das man die in einer Liste verwalten kann.

Viel einfacher:
ausblenden C#-Quelltext
1:
List<CGraficObjekt> list = new List<CGraficObjekt>();					

Dann dürfen in diese Liste genau die CGraficObjekt-Instanzen sowie davon abgeleitete Instanzen eingetragen werden. Du hast lediglich das Problem, dass du bei Bedarf das jeweilige Objekt casten musst:
ausblenden C#-Quelltext
1:
2:
CLinie line = list[23as CLinie;
if( line != null )  { ... }

Übrigens solltest du deine Bezeichnungen überprüfen: Grafic mit c, Objekt mit k, dazu das C am Anfang - so muss das nicht sein. Siehe NET Richtlinien für Namen.

Gruß Jürgen
Foxi23 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Fr 29.01.10 19:28 
Jürgen........ danke dir,


werden das gleich ausprobieren,

bis dann
der Eisenmann
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Fr 29.01.10 20:20 
user profile iconFoxi23 hat folgendes geschrieben Zum zitierten Posting springen:
Jürgen........ danke dir,


werden das gleich ausprobieren,

bis dann
der Eisenmann

Verd..., hätte ich doch die Antwort von herbivore dort zuerst gelesen. Diese Doppel-Posts! Jürgen
Foxi23 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: So 31.01.10 15:34 
OK, Entschuldigung wegen dem Doppel-Post,
mach´s nicht wieder.
Ich hatte halt Panik gekriegt, bin nicht weiter gekommen.

Und wieder danke, jetzt klappt´s genauso wie ich das haben wollte.


bis dann Foxi23
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 31.01.10 16:03 
Zur Info: Crossposts sind bei uns durchaus erlaubt, Du solltest halt nur auf den Thread im anderen Forum verlinken, damit sich niemand Arbeit mit einer Antwort macht, die woanders schon steht. :-)

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".