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

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von TBR
Thema: Interessante Features aus Kotlin, die sich auch C# gut machen würden
Am im Forum: Rund um die Programmierung

Switch mit generellen bool'schen Ausdrücken ist doch schon in C#7 drinnen. Kurz: Pattern Matching.

Thema: Bewegung von einer Maus in einer kleinen Grafik darstellen/tracken
Am im Forum: Rund um die Programmierung

Mehrmals pro Sekunde (ich würd ca. 10-100ms nehmen) die Mausposition abfragen, dabei die vorherige immer speichern. Einfach die neue Position - die alte rechnen, damit hast du die Delta-Position, also die Verschiebung.

Mit den trigonometrischen Funktionen (Sinus, Cosinus, Tangens) kannst du dann den Winkel berechnen. Die Delta-Koordinaten (Vektor) stellen dabei die Hypotenuse (die lange Seite des daraus gebildeten Dreiecks) dar. Im Endeffekt sind die neue Position und die alte Position damit die Eckpunkte des Dreiecks, welche die Hypotenuse, also eben längste Kante bilden. Der letzte Eckpunkt ergibt sich aus einer Kombination von X und Y Koordinaten beider Positionen (X1 + Y2 oder X2 + Y1).

Mit den trigonometrischen Funktionen kannst du also den Winkel berechnen. Den dann einfach am "virtuellen Kreis" ansetzen und den Punkt am Rand entlang zeichnen (siehe diesen Artikel - es ist verdammt einfach: Find the point on a circle with given center point, radius, and degree)

Dazu findest du genug auf Wikipedia und Google. Das sind sehr einfache, normalerweiße intensiv-gelernte Funktionen, die du auch nach 20 Jahren noch hinkriegen dürftest.

Thema: Allround Game Editor
Am im Forum: Projekte

Ja, meine Aussage, dass WPF ein Abstellgleis-Projekt ist, ändert sich damit ja nicht. Ich bin mir dem was du/ihr gesagt habt absolut bewusst. Aber auch wenn der Standard geschaffen wird, heißt es nicht, dass WPF aktiv in Entwicklung ist. Das steht schon eine Weile überholt da. Aber langsam driften wir hier ziemlich off topic ;)

Thema: Allround Game Editor
Am im Forum: Projekte

Naja, es war keine Rede von WPF, oder hab ich da was überlesen? (Hab das nach Feierabend gelesen, also durchaus fehleranfällig :D).

Okay, XAML wird standardisiert für diverse Plattformen. Das würd ich jedoch dennoch nicht auffassen als "WPF wird weiterentwickelt". Bisher hat sich an WPF nichts geändert. Die meiner Meinung nach wichtigsten Neuerungen sollten mit "WPF vNext" kommen, das irgendwie mal besprochen wurde aber irgendwie nie wieder erwähnt wurde. WPF hat ein paar massive Probleme in Sachen Performance und ist mit DirectX 9 als Rendering-Basis alles andere als zukunftssicher.

Ich les aus dem Artikel lediglich, dass ich ein WPF Projekt nach Xamarin oder UWP portieren könnte. Und hier hab ich die Befürchtung, dass sich meine damalige Investition in eine professionelle UI Library als Verschwendung rausstellt.

Wie auch immer, es sind erfreuliche News - gar keine Frage :)

Thema: Allround Game Editor
Am im Forum: Projekte

Danke Abt, interessanter Artikel. Mir gefällt, wohin .Net geht.
Ich hab mir zwar Xamarin.Forms noch nicht angeschaut und hab grad keine Information zum Vergleich von WPF und Xamarin.Forms (mit dem XAML Standard) - aber sollte man WPF Programme nahezu problemlos portieren können, wäre das sehr fein.

Ich bedauere momentan, dass WPF schon wieder ein Abstellgleis-Projekt seitens Microsoft ist, das nun hoffentlich endlich durch etwas zukunftssichereres ausgetauscht wird. Forms kamen für mich nicht in Frage, jedoch ist fehlende Portabilität und das quasi nicht-vorhandensein von DirectX10+ Support traurig.

Nichtsdestotrotz, ich würd mich gern mal austauschen. Du kannst ja mal irgendwelche Kontaktmöglichkeiten per PN durchreichen.

Thema: Allround Game Editor
Am im Forum: Projekte

Ich arbeite selber an einem Projekt der gleichen Idee. Zwei Iterationen in WinForms und die dritte und aktuelle nun in WPF, da so ein umfangreiches Programm mit WinForms einfach nur eine Tortur darstellt.

Das Projekt läuft bereits seit ~2012 und ist mittlerweile gut gereift. Ich hab regelmäßig gezweifelt, ob es denn wirklich Sinn mache, da Unity und Unreal bereits sehr starke Editoren besitzen.

Noch gibt es ja wenig zu bestaunen, ich wünsche aber viel Glück bei dem Unternehmen. Ich arbeite auch alleine und kann nur sagen: Es dauert Ewigkeiten so ein Projekt zu stemmen.

Thema: MonoGame + Farseer Physics - Units zu Pixeln umrechnen
Am im Forum: Grafik und Sound

Ich weiß, etwas spät, aber als weiterer Ansatz der Komfort schafft und etwas nach "Separation of Concerns" geht:

Verwende doch Extension Methods:


public static Vector2 ToDisplay(this Vector2 vector)
{
     return UnitConverter.ToDisplayUnits(vector);
}

Das macht die Verwendung wesentlich einfacher und kompakter und im Falle zusätzlicher Transformationen kannst du das zentral in der EM machen, ohne überall den Code zu ändern (bspw. wenn du den Vector noch normalisieren würdest zuvor - klar macht kein Sinn, aber als Beispiel).


SpriteBatch.Begin();
SpriteBatch.Draw(IrgendeineTexture, position.ToDisplay());
SpriteBatch.End();

Thema: Hyperlinked Validation System - Formular-Input-Prüfung
Am im Forum: Projekte

Mit DataAnnotations und Enterprise Library hab ich noch nie gearbeitet, drum kann ich dir auch nicht sagen was besser / schlechter wäre.

Wers braucht kann es verwenden, wer nicht, nicht. Was HVS kann ist (momentan noch nur auf Codeplex) beschrieben (ich werd aber bald den Thread updaten).

Das ganze System ist halt sehr simpel und multifunktional gehalten. Man kann vieles damit machen - und wie gesagt, wer Anregungen / Wünsche hat kann sie gerne stellen :)

Ich kann nur sagen, dass es wesentlich besser und komfortabler ist als WinForms-Validations ;)

MfG
TBR

Thema: Hyperlinked Validation System - Formular-Input-Prüfung
Am im Forum: Projekte

Eben wurde Version 3.0 released. Es hat ein komplett überarbeitetes System und viele neue Funktionen die das ganze noch weitaus mehr vereinfachen.

Genauere Informationen finden sich auf der Projektseite: http://hvs.codeplex.com/
(Ich kann leider nicht überall die Informationen sofort aktualisieren)

Thema: Events werden mehrmals aufgerufen / Events deregistrieren / Abfragen, ob Event registriert ist
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Das Problem ist, dass ich nicht weiß ob der Handler hinzugefügt ist.
Ich dachte eigentlich, das .Net den selben Delegate nur einmal ans Event bindet, bzw. nru einmal aufruft... oder wenigstens eine Möglichkeit bietet, dass man prüft ob der Delegate an das Event gebunden ist.

Aber naja, da scheitert .Net wohl noch.

Ich werds einfach mit einer Variable machen. Ich finds zwar umständlich, aber gut...

Mit Reflection möcht ichs gar nicht machen, da wär der Aufwand höher als der Sinn.

Aber danke für die Tipps :)
MfG
TBR

Thema: Events werden mehrmals aufgerufen / Events deregistrieren / Abfragen, ob Event registriert ist
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ja mir ist klar dass hier der Fehler liegt.

Ich update es, denn sobald sich ein Int nicht 1 oder 2 ist sollen sich alle Handler vom Event ablösen. Wenn er wieder 1 oder 2 ist sollen sie sich wieder registrieren.

Das Problem ist, wie ich prüfe ob der Handler schon hinzugefügt worden ist :-/
Click auf null prüfen geht nicht, "=" anstatt "+=" geht nicht ...

Irgendwie muss das doch ganz einfach gehen, oder ist das etwa ein .Net Fail?

Thema: Events werden mehrmals aufgerufen / Events deregistrieren / Abfragen, ob Event registriert ist
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo, ich hab grad ein Problem...

Mein Code added per Timer immer eine Methode fürs Click-Event eines Controls.
Nun bei einem Klick wird, jenachdem wie lang das Programm schon läuft immer öfters die Methode aufgerufen...

Kann man das verhindern, ohne zigtausend Variablen und if´s?

Durch das wiederholte aufrufen geht das ganze nicht gescheit ...

Danke
TBR

Thema: Teamspeak 3 SDK verwenden
Am im Forum: Rund um die Programmierung

Das sieht mir danach aus, dass es ziemlich einfach ist so mit TS zu arbeiten :)

Ich werds mir mal anschauen, danke dir ;)

Thema: Teamspeak 3 SDK verwenden
Am im Forum: Rund um die Programmierung

Ja im Gegensatz zum Sample - was das komische ist ...

Thema: Teamspeak 3 SDK verwenden
Am im Forum: Rund um die Programmierung

Ich hab ein Problem. Ich hab das Sample mal übernommen, jedoch kommt beim Aufurf von:

            uint error = ts3client.ts3client_initClientLib(ref cbs, ref cbs_rare, LogTypes.LogType_FILE | LogTypes.LogType_CONSOLE, null);

Ein Fehler:
Fehler
Die DLL "ts3client_win32.dll": Das angegebene Modul wurde nicht gefunden. (Ausnahme von HRESULT: 0x8007007E) kann nicht geladen werden.

Ich hab keinen Plan wieso, im Sample gehts auch ...

Thema: Teamspeak 3 SDK verwenden
Am im Forum: Rund um die Programmierung

Ich hab zweimal geschaut, das waren irgendwie nur 4 Enums und ein Haufen vordefinierterer Dinge ... Aber kein Sample wie mans nutzt :O

Ich hab noch nie mit nativen Libs gearbeitet - wie man sie verwendet usw. drum bin ich da jetz auch nich so helle wie das Sample funktioniert ...

Ich schaus mir nochmal an..


EDIT: Ok, ich versuchs mal. Werd schon irgendwie scheitern :D

Thema: Teamspeak 3 SDK verwenden
Am im Forum: Rund um die Programmierung

Hallo,
ich hab mal eine kurze Frage:

Kann ich in eine C# App irgendwie das Teamspeak 3 SDK einbauen?
Das SDK ist ja nativ kompiliert. Ich vermute das "DllImport"-Verfahren kann man hier nicht anwenden, einen Wrapper gibts leider noch nicht und sonst?

Irgendwie muss man doch auf die Funktionen zugreifen können, oder nicht? Ich hab vor kurzem mal was gelesen, dass es dafür eine Loader-API von Windows gibt oder so, die man verwenden kann um die Funktionen zu suchen und zu Invoken ...


Aber gibts keine einfache Lösung?

Danke
TBR

Thema: UserControl Click Event feuert nicht immer [==> nämlich nicht beim Klick auf enthaltene Controls]
Am im Forum: GUI: Windows-Forms

Ja werden korrekt registriert.

Also die GUI wird nicht ausgelastet. Ich hab zwar einen Timer der alle 4 Sekunden alle Controls updated (State-Property und Text), sie aber nicht irgendwie löscht und neu erstellt oder so...

Also ich glaub irgendwie nicht dass das das ganze so auslastet... sind 63 Controls insgesamt...

Also blockiert wird nichts, habs getestet... aber irgendwie zögert das teils echt extrem -.-


EDIT: Ach herje ... jetz hab ich das Problem. Das ist ja das Klick-Event des userControls. Wenn man nun auf die Labels die drauf sind klickt, dann geht das ned ... :-/

Thema: UserControl Click Event feuert nicht immer [==> nämlich nicht beim Klick auf enthaltene Controls]
Am im Forum: GUI: Windows-Forms

Hallo,
ich hab eine Liste von Usercontrols. Im Code füge ich denen beim Setzen des "SelectionMode" Propertys eine Methode als Handler für das Click-Event an.

Beim Testen jedoch klappt das nur ab und an. Man muss oftmals 10-20x klicken bis es wargenommen wird, manchmal wirds auch doppelt wargenommen (scheinbar) und manchmal gehts sofort...

Kann das irgendwo dran liegen, oder meint ihr ich hab irgendwo einen Fehler im Code?

(Das ist eine Methode die beim Ändern der "UsageMode" Property ausgelöst wird, sowie beim Setzen der "State"-Property)

            if (!UsageMode)
            {
                context_status.Enabled = true;
                switch (State)
                {
                    //...
                }
            }
            else
            {
                context_status.Enabled = false;
                if (State == 1 | State == 2)
                {
                    BackColor = Color.LimeGreen;
                    ForeColor = Color.Black;
                    Click += Controller.SelectionMode_Selected;
                }
                else
                {
                    BackColor = Color.LightGray;
                    ForeColor = Color.Black;
                    Click -= Controller.SelectionMode_Selected;
                }
            }

Und hier der Handler:

            StateControl state = (StateControl) sender;
            if (state.State != 2 & state.State != 1) return;

            state.ItemSelected = !state.ItemSelected;

            if (state.ItemSelected)
            {
                Selection.Add(state);
                state.BorderStyle = BorderStyle.FixedSingle;
                state.BackColor = Color.Orange;
            }
            else
            {
                Selection.Remove(state);
                state.BorderStyle = BorderStyle.None;
                state.BackColor = Color.LimeGreen;
            }

            if (VehicleSelected != null)
                VehicleSelected(this, EventArgs.Empty);


Danke euch :)
TBR

Thema: Hyperlinked Validation System - Formular-Input-Prüfung
Am im Forum: Projekte

Bisher noch nicht, aber wenn das gewünscht wird kann ich es gern in 3.0 umsetzen.

Bisher war ja nur die "Standard"-Verwendung geplant. Sprich WinForms und stinknormale .Net-Control geerbte Controls ;)

Das sollte aber kein Problem darstellen...

Oder wenn ich micht nicht ganz täusche (hab jetzt eine Zeit nicht weitergearbeitet und bin mir nicht sicher ob es in 3.0 oder in der 2.0er hier war) aber falls "LinkObject"´s "Base"-Property von "object" abgeleitet ist, dann sollte es auf jedenfall mit allen Dingen gehen (und das glaub ich ist so...).

Spätestens in 3.0 wird es möglich sein ;)



Btw, da ich das schonmal gefragt wurde:
HVS ist nicht eine andere Implementation der WinForms-eigenen Validation-Methoden. Es ist ein einfacheres und flexibleres System.
Zwar kann WinForms eigentlich im Endeffekt das selbe, jedoch müsste man für Controls jeweils eine Funktion schreiben, so genügt eine Zeile Code und in 3.0 ein wenig Designer-Arbeit ;)

Von daher, es ist doch besser als WinForms-Validations ;)

Thema: Hyperlinked Validation System - Formular-Input-Prüfung
Am im Forum: Projekte

Hier das ganze nochmal, nur jetzt ist das Passwort optional.
Wie man sieht werden "RequiredPassword" nun ignoriert und es wird trotzdem als gültig anerkannt.

Thema: Hyperlinked Validation System - Formular-Input-Prüfung
Am im Forum: Projekte

Hallo,
ich möchte euch mal mein kleines Tool vorstellen, das ich mal vor einiger Zeit gebaut habe.

Ich persönlich finde es wahnsinnig sinnvoll und hilfreich - vielleicht ihr auch.

Die Informationen, Bilder und der Code-Snippet sind veraltet. Aktuelle Informationen finden sich auf der Projektseite: http://hvs.codeplex.com/
Es tut mir Leid dass ich die Informationen nicht immer überall sofort aktualisieren kann.


Das ganze ist ein System um Forumlare in WinForms abzufragen.
Ihr kennt das bestimmt, wenn man 5 Textboxen, 2 Checkboxes, 3 Optionale Felder und noch ein Zahlenfeld hat, welche man alle prüfen muss um den "Abschicken"-Button freizugeben (aktivieren).

HVS schafft hier ab. Mit nur wenig Code kann man sehr komplexe Abfragen erstellen und somit viel schneller seine Formulare korrekt abfragen.


Der Spaß bietet die Möglichkeit, jede Eigenschaft von etwas zu prüfen.
Je nach Einstellung kommt was anderes dabei raus - es wird ausgewertet ob alle Bedingungen erfüllt sind.
Dabei kann man für jede Abfrage eines Objektes noch zusätzlich Bedingungen stellen. Diese wiederrum haben einige Einstellungsmöglichkeiten um den Verlauf der Abfrage zu modellieren.

Das System ist gerade zu dieser vollen Stunde in die Version 2.0 aufgestiegen, mit einigen Änderungen und ein paar neuen Funktionen.

Hier ein Beispiel wie ihr folgende Applikation korrekt auswerten könnt seht ihr im Anhang.
Das geht mit soviel Code:

        private void mainFrm_Load(object sender, EventArgs e)
        {
            hvsValidator = new HVS();
            validStruct = new LinkStruct();

            validStruct.Add (new LinkObject ("Name", txb_name, txb_name.GetType ().GetProperty ("Text"), new TextValidator(false)));
            validStruct.Add (new LinkObject ("LastName",txb_lastname, txb_lastname.GetType ().GetProperty ("Text"),
                                           new TextValidator(false)));
            validStruct.Add (new LinkObject ("Email", txb_email, txb_email.GetType ().GetProperty("Text"), new EmailValidator ()));
            validStruct.Add (new LinkObject ("Agree",chb_tou, chb_tou.GetType ().GetProperty ("Checked"), new BoolValidator (true)));

            LinkObject txb_passwordLink = new LinkObject("Password",txb_password, txb_password.GetType().GetProperty("Text"),
                                                         new TextValidator(false));
            validStruct.Add(txb_passwordLink);

            LinkObject txb_repeatPasswordLink = new LinkObject ("RepPassword",txb_repeatPassword,
                                                               txb_repeatPassword.GetType ().GetProperty ("Text"),
                                                               new TextValidator (false), false,
                                                               new LinkCondition ("PassOptional",txb_passwordLink,
                                                                                 txb_passwordLink.GetType ().GetProperty(
                                                                                     "IsOptional"),
                                                                                 new BoolValidator (true), true, true));
            txb_repeatPasswordLink.Conditions.Add(new LinkCondition ("PasswordEqual",txb_repeatPassword,
                                                                    txb_repeatPassword.GetType ().GetProperty("Text"),
                                                                    new ValidationObjectValidator (txb_passwordLink)));
            validStruct.Add(txb_repeatPasswordLink);

            validationCheckTimer.Start();
        }

Sprich, viel weniger als wenn man es per Hand macht ;)

Ich hab auch schon einiges für 3.0 geplant - dann werden es eventuell Sachen sein, um das ganze noch viel besser und schöner zu integrieren. Vielleicht klappts mit Design-Time-Support :)

Wen es interessiert:
http://hvs.codeplex.com/

Thema: Möglicher Versionskonflikt mit SOAP-API
Am im Forum: Netzwerktechnologien

Das hilft mir nicht wirklich ... zumindest find ich nichts hilfreiches :-/

Danke aber ;)

Thema: Möglicher Versionskonflikt mit SOAP-API
Am im Forum: Netzwerktechnologien

Hallo,
ich hab ein kleines Problem mit SOAP:

Ich verwende für mein Programm SOAP auf Basis eines PHP-Servers mit Zend-Framework.

Ich hab das Projekt jetzt gute 2 Monate liegen gelassen, vorher ging es jedoch noch.
Das Problem ist, dass nun immer wenn ich den Service aufrufe (also eine Methode davon), kommt ein Fehler:

"Möglicher SOAP-Versionskonflikt: Unerwartetes Einschließen des Namespaces 'http://schemas.xmlsoap.org/wsdl/'. Erwartet wurde http://schemas.xmlsoap.org/soap/envelope/."

Es ging vorher garantiert! Und ich hab auch nichts an der API geändert.
Nun kommt jedoch dieser Fehler und ich weiß nicht wie ich den beheben kann.

Wenn ich das WSDL anschaue finde ich nirgends einen solchen Namespace. Was ist hier bitte los? Ich kann mein Programm ohne funktionierende API blöderweise nicht großartig weiterentwickeln, da das meiste darauf basiert und ich die zum Testen bräuchte :-/


Das Problem ist ja öfters aufgetaucht, Google spuckt nur keine Lösung aus :-/
Weiß hier wer Bescheid?

Danke
TBR

Thema: Via Reflection Generische Properties setzen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Verständlich, aber wir kommen da ganz gut mit klar ;)
Mir ist es nur lieber das implizit zu machen als explizit casten zu müssen, denn dann schlägt das wieder fail wenn man das per Reflection setzt, soweit ich weiß ...

Mich wundert nur, wieso AssetData den Operator haben muss, denn AssetData<T> ist von AssetData ja castbar, aber er will unbedingt den Operator von AssetData :(

Irgendwie muss es doch ne Lösung geben :-/


EDIT: Bin haarscharf dran. Ich versuch es gerade so, und es geht beinahe. Problem ist wieder das Casten, da ich den Generischen Typ nicht hab...

                foreach (PropertyInfo pinf in comp.GetType().GetProperties())
                {
                    for (int i = 0; i < cdata.PInf.Count; i++)
                    {
                        if (cdata.PInf[i] != pinf.Name) continue;

                        AssetData assetData = new AssetData
                                                  {
                                                      AssetName = cdata.AN[i],
                                                      AssetType = Type.GetType(cdata.AT[i], true)
                                                  };
                        Application.Game.GetSystem<ContentManager>().LoadContent(ref assetData);

                        if (pinf.PropertyType.IsGenericType)
                        {
                            Type cast = pinf.PropertyType.GetGenericTypeDefinition().MakeGenericType(assetData.AssetType);
                            dynamic instance = Activator.CreateInstance(cast);
                            instance.AssetName = assetData.AssetName;
                            instance.Asset = Convert.ChangeType(assetData.Asset, assetData.AssetType);
                            instance.AssetType = assetData.AssetType;

                            pinf.SetValue(comp, instance, null);
                        }
                    }
                }

Problem ist, dass das Asset einfach nicht implizit konvertiert werden kann. Fällt wem ne spontane Lösung ein, wie man das umgeht?
So kurz vorm Durchbruch ...

Ich dreh noch durch damit :D

EDIT2: Schade. Der Operator funktioniert hier nicht, denn sonst hätt ich das AssetData in das dynamische Objekt werfen können ... das dynamische ist jetzt z.B. "AssetData<Texture2D>", jedoch fehlen die Felder - der Operator überschreibt, und setzt nicht :(

EDIT3: Problem gelöst.
AssetData hat eine generische Funktion "Cast<T>()" bekommen, welche ich per Reflection invoke und fertig:

                        if (pinf.PropertyType.IsGenericType)
                        {
                            MethodInfo method =
                                assetData.GetType().GetMethod("Cast").GetGenericMethodDefinition().MakeGenericMethod(
                                    assetData.AssetType);

                            dynamic castedAsset = method.Invoke(assetData, null);

                            pinf.SetValue(comp, castedAsset, null);
                        }

Thema: Via Reflection Generische Properties setzen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo, ich hab grad ein riesen Problem.

Ich arbeite momentan stark mit Reflection um mir hardcoded-Zeugs zu sparen.
Dabei hab ich folgende Klassen:

AssetData und AssetData<T>. Diese haben keinen geerbten Bezug, jedoch selbige Eigenschaften. Bei AssetData ist "Asset" ein object und bei "AssetData<T>" ist es eben "T".

Erstes brauch ich für allgemeine Arbeiten, wo ich nicht weiß was es für ein Typ ist.
"AssetData<T>" ist implizit castbar in AssetData - funktioniert.

Problem ist, ich muss bei einer PropertyInfo die z.B. den Typ "AssetData<Texture2D>" hat, ein AssetData setzen. Ich will nicht wieder was hardcoden, da ich bei neuen Typen sonst alle Codestellen erneuern muss, damit diese den Typ richtig verwenden oder erkennen.


Wie kann ich die nun am blödesten Setzen? Ich kann AssetData leider nicht casten, da ich den Typ "T" nicht habe. Im Grunde ist Asset bei beiden der gleiche Typ, jedoch erkennt er es logischerweise nicht so.

Gibt es eine Möglichkeit das zu umgehen? Ich muss irgendwie das object "Asset" von "AssetData" in das "T Asset" von "AssetData<T>" bringen.

Hier die Klassen:

    public class AssetData
    {
        public string AssetName;
        public Type AssetType;
        public object Asset;

        public bool IsQualified
        {
            get
            {
                return AssetName != "" & AssetType != null & Asset != null;
            }
        }
    }

    public class AssetData<T>
    {
        public static implicit operator T(AssetData<T> data)
        {
            return data.Asset;
        }

        public static implicit operator AssetData(AssetData<T> data)
        {
            return new AssetData
                       {
                           AssetName = data.AssetName,
                           AssetType = data.AssetType,
                           Asset = data.Asset
                       };
        }

        public static implicit operator AssetData<T>(AssetData data)
        {
            if (data.Asset != null) throw new NullReferenceException("Can´t cast AssetData because it´s Asset is null!");
            if (data.AssetType == typeof(T))
                return new AssetData<T>
                           {
                               AssetName = data.AssetName,
                               AssetType = data.AssetType,
                               Asset = (T) data.Asset
                           };

            throw new InvalidCastException("Could not cast AssetData with Asset '" + data.AssetType.Name +
                                           "' into AssetData<" + typeof (T).Name + ">!");
        }

        public string AssetName;
        public Type AssetType;
        public T Asset;

        public bool IsQualified
        {
            get
            {
                return AssetName != "" & AssetType != null & Asset != null;
            }
        }
    }


Danke euch :)
TBR

Thema: PropertyGrid-Eintrag mit Funktion verlinken
Am im Forum: GUI: Windows-Forms

Hallo Leute,
ich hab ne Frage zu der ich momentan null Plan habe, wie man das nur ansatzweiße machen könnte...

Ich habe verschiedene Objekte von der Hauptklasse Component, die zur Laufzeit per Reflection aus einer Assembly geladen werden.

Ich kann diese erstellen, hab sie in einem TreeView und bei Auswahl werden diese in das PropertyGrid geladen.


Nun möchte ich wenn ich bei der Property "TextureAsset" im Grid auf den Auswahlbutton klicke, dass sich eine Tabpage zeigt und ich dort in einer Treeview was auswählen kann, und per klick auf den Button "Assign" dies zugewiesen wird.

Knackpunkt ist hier lediglich, wie ich beim Drücken dieses Buttons im Propertygrid die Tabpage anzeige ;)

Kann man das irgendwie realisieren? Andernfalls muss ich es anders machen, was nich so schön wär :-/


Von daher, danke euch :)
TBR

Thema: Jade.NET (C# - Decompiler)
Am im Forum: Projekte

Respekt, das Ding ist echt sehr gelungen :)

Was mir nach einem 5 Minuten Test als einziges aufgefallen ist und gefehlt hat:
Wenn man eine Klasse auswählt (keine Member davon), dass diese KOMPLETT dargestellt wird ;)


Aber ansonten echt Klasse Tool, gefällt mir irgendwie sogar mehr als Reflector... :)
Weiter machen ;)

Thema: Suche Visual Studio Changelog Addin / Ist sowas sinnvoll?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo,
ich möchte in diesem Post mal fragen ob wer sowas oder ähnliches kennt, bzw. den Vorschlag an Erfahrene VS-Addin Programmierer (ich schaffs bis heute nicht ... irgendwie bin ich zu dumm oder es ist wirklich so extrem kompliziert).


Die Idee:
Ein Addin, welches einen visuellen Changelog-Editor implementiert, der für das Projekt und/oder für die Projektmappe Changelogs generiert.
Man kann diese manuell ändern oder, was auch sehr nützlich wär, durch Erkennung von neuen "//BUG: meine Notiz" oder bspw. "//TODO: Implementieren" neue Einträge hinzuzufügen (als Schattenkopie, bis diese Solved sind, oder gelöscht werden).

Am besten wärs, wenn man in einem Kontextmenu oder dem Editor den Kommentar auswählen kann, bzw. im Kontextmenu er diesen erkennt und dann per Klick auf "Solved" dieser ins Changelog eingetragen wird und der Kommentar gelöscht wird.

Sowas in der Art halt. Das manuelle Schreiben ist zwar auch einfach, aber oft blöd, wenn man mal was vergisst einzutragen, was mir zum Beispiel oft passiert.
Man könnte da ja viel draus machen ;)


Was haltet ihr davon? Gibts sowas schon (in irgendeiner Form)?

MfG
TBR

Thema: ISerializable verwendende Objekte nicht-binär serialisieren
Am im Forum: Datentechnologien

verwendetes Datenbanksystem: XML

Hallo, kurz und knapp:
Gibt es eine Möglichkeit, Sachen, welche "ISerializable" implementieren, damit sie überhaupt serialisierbar sind, nicht binär zu serialisieren?

Es gibt ja irgendwie nur BinaryFormatter und SoapFormatter...
Binär kann ichs nicht brauchen, weils manuell editierbar sein muss.

Problem ist, ich hab eine Klasse mit mehrdimensionalen Arrays. Der XmlSerializer will diese Klasse serialisieren und wird deswegen eine Exception.
Die "GetObjectData"-Methode von ISerializable ignoriert der irgendwie - oder mach ich was falsch?

Die Implementation:

        public void GetObjectData(SerializationInfo info, StreamingContext context)
        {
            List<LayeredMapSerialization>[] convertedElements = new List<LayeredMapSerialization>[LayersCount];
            for (int layer = 0; layer < LayersCount; layer++)
            {
                for (int x = 0; x < _width; x++)
                {
                    for (int y = 0;y<_height;y++)
                    {
                        convertedElements[layer].Add(new LayeredMapSerialization
                                                         {
                                                             Element = _items[layer][x, y],
                                                             X = x,
                                                             Y = y
                                                         });
                    }
                }
            }

            info.AddValue("elements", convertedElements);
            info.AddValue("elementInfo", new LayeredMapSerializationInfo
                                             {
                                                 Layers = LayersCount,
                                                 Width = _width,
                                                 Height = _height
                                             });
        }

        [Serializable]
        private struct LayeredMapSerialization
        {
            public int X { get; set; }
            public int Y { get; set; }
            public T Element { get; set; }
        }

        [Serializable]
        private struct LayeredMapSerializationInfo
        {
            public int Layers { get; set; }
            public int Width { get; set; }
            public int Height { get; set; }
        }

Serialisierungs-Funktion:

        public static void Serialize<T>(object data, string path)
        {
            try
            {
                var sw = new System.IO.StringWriter();
                var sr = new XmlSerializer(typeof(T));
                sr.Serialize(sw, data);
                System.IO.File.WriteAllText(path, sw.ToString());
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + ex.StackTrace);
                while (ex.InnerException != null)
                {
                    ex = ex.InnerException;
                    MessageBox.Show(ex.Message + ex.StackTrace);
                }
            }
        }

Der Aufruf:

            XMLSerializer.Serialize<LayeredMapList<Element>>(gamelevel, "levelMap.xml");

Danke euch :)
TBR