Laden...
Avatar #avatar-1895.jpg
polofreak myCSharp.de - Member
System Engineer D BW Dabei seit 11.04.2006 181 Beiträge
Benutzerbeschreibung

Forenbeiträge von polofreak Ingesamt 181 Beiträge

16.05.2006 - 14:27 Uhr
           switch (val)
            {
                case (val is bool):
                    {
                    
                    break;
                    }
            } 
16.05.2006 - 11:36 Uhr

nein es ist kein konzeptionelles Problem! Bei mir sind diese Shapes nicht nur die Visuelle-Erscheinung sondern da stecken Objekte für eine Simmulation dahinter. Somit haben sie auch um einiges mehr Properties als die Properties des aussehens. Und auf die muss zugegriffen werden, da die Shapes untereinander interagieren, und dabei müssen sie nunmal auf die Properties zugreifen.

Zu " Wer will denn die Properties abfragen und warum? " Ich aus besagtem Grund. Ausserdem wollte ich nicht eine Grundsatzdiskussion Anfangen ob es sinnvoll ist Properties zwischen den Unterklassen abzufragen oder nicht ich wollte wissen wie man das macht.

Doch leider scheint hier keiner ne wirkliche Lösung zu haben. Mich würde immernoch interessieren was es mit dem Versionskonflikt auf sich hat, denn das könnte ich mir schon sehr gut vorstellen dass es daran liegt

Mfg Polo

15.05.2006 - 10:51 Uhr

@tomschrot: auch das funktioniert leider nicht! Wahrscheinlich weil er einfach nicht casten kann. Vermutlich wegen dem schon genannten Versionskonflikt, von dem ich nicht weiß wie ich ihn angehen soll 🙁

15.05.2006 - 10:42 Uhr

@ tomschrot: Danke werde ich mal probieren.

@ herbivore und Lexodus: Im Bild seht ihr einen ausschnitt aus meiner GUI. Diese gezeichneten Objekte sind Objekte der Klassen die ich neben dran geschrieben hab. (stammen aus einer DLL) Die gezeichneten Objekte werden zur Laufzeit auf eine Zeichenfläche eingefügt, und bei jedem Neueinfügen wird auch ein Objekt der entsprechenden Klasse erzeugt. Ich habe unterschiedliche Properties in den unterschiedlichen Klassen, auf die ich aus dem Hauptprogramm zugreifen will. Wenn ich mir jetzt alle Shapes der Zeichenfläche hole, schreibe ich sie alle in meine ShapeCollection. Wenn ich jetzt auf die Properties zugreifen will sollte ich aber wissen was für ein Typ es ist. Oder etwa nicht??

15.05.2006 - 09:01 Uhr

also die Objekte der Unterklassen an sich erzeuge ich via Reflektion, aber wenn ich dann zur Laufzeit Objekte dieser Unterklassen erzeuge, dann mach ich das mit new.

Das mit dem Versionierungsproblem könnte es schon sein, aber wo muss ich jetzt den Fehler suchen??

@herbivore: meine Unterklassen haben unterschiedliche Properties. Wenn ich jetzt einfach auf das Property Kosten zugreife, dann haben das manche der Unterklassen und andere eben nicht! Und ich könnte auch if des Property da ist prüfen aber das wäre ja noch viel Semiprofessioneller, und wesentlich unperformanter, wenn ich bei jeder Unterklasse alle Möglichkeiten der anderen Unterklassen mitprüfen würde.

12.05.2006 - 13:35 Uhr

Die collection wird in einer DLL gefüllt, aber hier mal zwei Screenshots wo der Typ angezeigt wir
und die sind doch gleich oder nicht?

So wenn ich mach

if (scheiss is Shape)

dann geht es 🙁 aber ich will doch auch den Typ der davon geerbt hat wissen. und desweiteren fliegt dann ne Exception in der Zeile

blubber = (Arbeitsgang)scheiss;

in der steht:

Unable to cast object of type 'Netron.GraphLib.AG.Arbeitsgang' to type 'Netron.GraphLib.AG.Arbeitsgang'.

bin ich jetzt besoffen oder mein VS

12.05.2006 - 11:55 Uhr

hm geht nicht 🙁
hab es jetzt mal so probiert aber in die if geht er immernoch nicht!

ShapeCollection SC = new ShapeCollection();
Arbeitsgang blubber = new Arbeitsgang();
           foreach(Shape sh in graphControl1.Nodes)
                SC.Add(sh);
            foreach (Shape scheiss in SC)
                if (scheiss is Arbeitsgang) //Arbeitsgang ist von Shape abgeleitet
                {
                    blubber = (Arbeitsgang)scheiss;
                }
12.05.2006 - 11:49 Uhr

cool werde ich gleich mal probieren 😉

12.05.2006 - 11:30 Uhr

was ist aber dann falsch?? 🙁 was muss ich machen zu sehen ob die vom gleichen typ sind?
zu "also wenn man Typen vergleichen will, ist meinstens was faul. Das muss man quasi nie"
na wie soll ich es dann machen? Ich hab eine Klasse Shape, eine Klasse ShapeCollection, und drei weitere Klassen die von Shape erben wenn ich jetzt die geerbten Klassen wild gewürfelt in ein ShapeCollectionObject rein Stecke, wie soll ich denn sonst raus finden um welche Unterklasse es sich handelt?

11.05.2006 - 18:27 Uhr

Hi zusammen ich möchte zwei Typen miteinander vergleichen, aber ich komm nie in mein IfStatement rein, kann mir einer von euch sagen warum?

if (scheiss.GetType() == (ag.GetType()))

if (scheiss.GetType().Equals(ag.GetType()))

das hab ich probiert wenn ich die Variablen beobachte dann sieht das für mich SEHR gleich aus!!
any ideas?

11.05.2006 - 14:04 Uhr

also die Lösung sieht folgendermaßen aus. Klasse erstelle dann eine CollectionKlasse dazu einen Typeconverter für beides bauen den von expandableObjectAdapter ableiten und die convert Methoden überschreiben und fertig. Dann eine Collection als Property einfügen und schon fügt er automatisch das ein was in der collection in der Add Methode steht.

11.05.2006 - 09:50 Uhr

Hi zusammen, es geht wieder mal um ein Propertygrid (ich weiß ich nerv damit)
und zwar wenn ich ne Arraylist als Property hab, dann ist hinter dem Property im PropertyGrid so ein kleiner Button [...] wenn man da drauf clickt kommt eine Liste was da schon drin ist in der Array List und was nicht. Dort gibt es einen Button Add und einen Remove, mit dem man Objekte der Arrayliste hinzufügen oder löschen kann. Drücke ich jetzt auf Add fügt der mir System.Object in die Liste ein. Und genau da möchte ich dann aber meine eigenen Objecte einfügen, nur wie??
Ich hab mir gedacht ich muss irgendwie das OnClick Event von dem Button abfangen und dann die Add methode überschreiben, nur wie? Kann mir da jemand helfen, oder weiß jemand ein Tutorial wo sowas beschrieben wird?? (NUR BITTE NICHT DIE WEBCASTS von Bernd Marquardt zu dem Thema! Die sind echt super nur leider behandeln sie das Thema nicht 🙁 )

Wäre echt dankbar wenn mir einer von euch weiterhelfen könnte.

mfg

11.05.2006 - 09:15 Uhr

schau mal hier die kann zwar noch mehr wie du eigentlich willst, aber kannst dir ja das raus ziehen was du brauchst. Ich fand es sehr nützlich. Einfach einbinden dann hast du deine RegEx Textbox wo du über die Properties RegEx etc mitgeben kannst und viele schöne sachen einstellen kannst 😉

10.05.2006 - 11:09 Uhr

also in den Webcasts gibt es leider nicht was ich gesucht habe, lediglich eine Variante würde als workaround wohl funktionieren.
Allerdings habe ich die Lösung schon selbst gefunden. Ich habe eine Collection Klasse angelegt und für diese wieder einen eigenen expandable Object Adapter implementiert, so geht es.

10.05.2006 - 08:06 Uhr

hab sie mir schon mal durch geschaut, weißt du wo man den BeispielCode her berkommt denn von go-sky.de wie im Webcast gesagt wird findet man es nicht mehr. Es würde die Sache extrem erleichtern.

09.05.2006 - 13:56 Uhr

Hi zusammen, als erstes mal ne kurze Erklärung, ich habe ein Propertygrid, dass mir je nach gewähltem Objekt andere Properties anzeigt. Ich habe eine Klasse die "Teile" heißt. für diese Klasse habe ich einen ExpandableObjectAdapter gebastelt, der mir die Props der Klasse richtig anzeigt. Soweit so gut.

Jetzt habe ich bei einem anderen Objekt ein Property vom Typ Arraylist, welches Objekte meine "Teile" Klasse beinhaltet. wenn ich jetzt im PGrid auf die Punkte click kommt auch schon der Name des Objekts und neben dran der Typ. Nebendran soll aber nicht der Typ kommen, sondern das was der ExpandableObjectAdapter mir gibt.

Wie mache ich denn sowas??

Im Bild sieht man ganz rechts sollte nicht nur der Typ stehen

24.04.2006 - 09:41 Uhr

Es wird im normalfall eine Connection gelöscht mal zwei aber viel mehr werden es eh nicht drum ist die zweite schleife eh schnell abgearbeitet. Am schnellsten ging es halt wenn ich einfach fix sagen würde es darf nur eine Connection gelöscht werden, oder? dann könnte ich doch auch gleich breaken und dann deleten oder??

24.04.2006 - 09:02 Uhr

Also hab es soeben probiert wie es VizOne vorgeschlagen hatte, und es funktioniert einfach prima. Euch allen herzlichsten Dank auch für die Erklärungen.
😁 👍

21.04.2006 - 16:18 Uhr

HEy vielen dank für die schnellen zahlreichen Antworten. Ich werde es sobald ich wieder weiter mach probieren, aber jetzt brauch ich erst mal feierabend. schließlich Freitag Nachmittag! 😉

vielen Dank euch allen!!

21.04.2006 - 16:02 Uhr

Aha Ok aber wie krieg ich jetzt das Element aus der Collection?? Ich mach ja die foreach um es zu finden!

ich zeig vielleicht mal ein wenig mehr Code, dann kann mir vielleicht einer von euch Profis sagen wie ich das besser machen kann, denn ich hab kein Plan!


//Aufruf:
                bla.RemoveEdge(e.Connection.UID);


//Funktion dazu:
        public void RemoveEdge(System.Guid uid)
        {
            foreach (Shape so in extract.Shapes)
                foreach (Connector co in so.Connectors)
                    foreach (Connection con in co.Connections)
                        if (con.UID == uid) con.Delete();
        }




also der erste Teil ist nur dass man den Aufruf mal sieht das Problem liegt in der letzten Codezeile
Man muss vielleicht noch dazu sagen dass die vielen foreach aus der Hierarchie Stammen. Jedes Shape hat Konnektoren und die wiederum besitzen Verbindungen

21.04.2006 - 11:57 Uhr

Hi zusammen in meinem Programm fliegt eine Exception die ich nicht verstehe, und wie soll ich sie behandeln wenn ich sie nicht mal verstehe. Vielleicht kann mir einer von euch erklären was gemeint ist.

ich hab ne foreach Schleife

foreach (Connection con in co.Connections) 

**in **ist markiert wenn die Exception kommt, und die Exception heißt

System.InvalidOperationException was unhandled
Message="Collection was modified; enumeration operation may not execute."
Source="mscorlib"
StackTrace:
at System.Collections.ArrayList.ArrayListEnumeratorSimple.MoveNext()
at Netron.GraphLib.UI.GraphControl.RemoveEdge(Guid uid)

Was heißt das? Wo ist was falsch implementiert, wo fang ich an zu suchen?

Vielen Dank schon im Voraus

21.04.2006 - 10:40 Uhr

vielen Dank für die Antworten. Und die die sich für dieses Thema interessieren am 22.5.2006 gibt es hierzu einen Webcast.

Infos hier

EDIT:

hier auch noch ein schöner Link zum Thema

18.04.2006 - 14:40 Uhr

Hi zusammen, ja ich habe schon im Forum gesucht und auch fest gestellt da gibt es einiges zu dem Thema, aber irgendwie komm ich noch nicht ganz klar damit wie ich jetzt Events abfange.

In meinem Programm soll ein Event ausgelost werden wenn eine Form auf eine Grafikfläche gezogen wird.

Jetzt will ich mal spasses halber ein PopUp aufmachen wenn eine neue Form auf die Fläche gezogen wird. Aber wie?
Das Event heißt graphControl1.OnShapeAdded wie fange ich das nun??

Kann mir da einer helfen?

vielen Dank schon im Voraus

12.04.2006 - 11:40 Uhr

oh ja! Hoch kompliziert denn die KW1 kann auch im Alten Jahr schon beginnen!! 😉

12.04.2006 - 10:31 Uhr

danke für die Links, hat zwar nicht zur Lösung meines Problems geführt, aber zur Erkenntniss, dass der Expandable Object konverter in der von mir genutzten Klasse nicht richtig implementiert ist 🙁 Jetzt weiß ich auch dass meine Frage nicht richtig gestellt war.

Ich möchte ein expandable Object aus einer anderen Klasse raus auf readonly setzen.

So wie ich das Attribut [Readonly(true)] in der Klasse setzen kann nun von einer anderen Klasse aus.

Wenn hierzu vielleicht noch jemand ne Lösung hat wäre es echt Klasse!

12.04.2006 - 08:55 Uhr

hat denn keiner ne mögliche Lösung parat??

🙁

12.04.2006 - 08:51 Uhr

nein es ist ein C# Projekt als Desktop Anwendung (weiß ich sicher von The Honk!)

11.04.2006 - 15:07 Uhr

hab selber noch ne Idee, weiß aber nicht ob das zum umsetzen meines Problems hilft!

kann ich readonly irgendwie mit dieser Methode setzten?

e.Property.Attributes.SetValue(object ValueType, int indexer);
11.04.2006 - 15:02 Uhr

hm und für mich ist es schwer Code zu zeigen 😉 weil ich greif auf ne DLL zu welche mir bestimmte Properties zurück gibt.

        protected override void GetPropertyBagValue(object sender, PropertySpecEventArgs e)
        {
            base.GetPropertyBagValue(sender, e);
            switch (e.Property.Name)
            {
                case "Ausfallwahrscheinlichkeit":
                    e.Value = this.dAusfallwahrscheinlichkeit;
// hier vielleicht sowas wie e.Property.Name.readonly(true);
                    break;
            }
        }

Wird aus dem Source klar was ich mein?

Im Anhang mal ein Bildchen wenn ich jetzt da wo die Werte zusammen stehen (Zeile 1 und 4) den Wert ändere dann bekomm ich die Exception

11.04.2006 - 14:28 Uhr

sorry schien nicht das richtige Forum zu sein. Vielen Dank fürs verschieben 👍

11.04.2006 - 14:15 Uhr

Hi zusammen ich hab ein PropertyGrid, das bestimmte Properties anzeigt und auch zum verändern bereit stellt. z.B. habe ich jetzt als Description

  • Location(xWert,yWert)
    xPosition
    yPosition

So wenn der User nun xPosition oder yPosition verändert passt alles mein Problem ist, wenn er was an der Location ändert krieg ich eine ArgumentException cannot convert (Wert,Wert) in Person
Wie kann ich entweder verhindern dass der User die Location ändert, oder wie kann ich den in der Location eingetragenen Wert auf xPosition übertragen??

vielen Dank schon im Voraus