Laden...

InvalidCastException - keine Ahnung warum

Erstellt von JunkyXL vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.583 Views
JunkyXL Themenstarter:in
1.665 Beiträge seit 2006
vor 17 Jahren
InvalidCastException - keine Ahnung warum

Ich verwende die in .NET 2 neuen Settings um Userinfos zu speichern...

Einfach nur mal den angehängten Screenshot ansehen.
Erlaubt es mir die Settings-Klasse nicht zu casten oder wo liegt das Problem?
Ich kann jedoch auf das vollwertige Property in Settings.Default.<Property> zugreifen, nur ich will das Ganze generisch halten und die PropertiesCollection nutzen.

Kann mir einer sagen wo das Problem hierbei liegt?

Edit: Ich sehe grade, dass das ein String ist, der in dem Objekt enthalten ist. Das ist irgendwie nicht sinn und Zweck des Ganzen. Zumal auch im PropertyType Property "System.Drawing.Point" steht..
Wie kann das sein, wenn das Property nur Point zulässt und es auch mit Point(1, 1) vorbesetzt ist.

T
512 Beiträge seit 2006
vor 17 Jahren

Du kannst nur einfach keinen String in einen Point casten.

e.f.q.

Aus Falschem folgt Beliebiges

JunkyXL Themenstarter:in
1.665 Beiträge seit 2006
vor 17 Jahren

Jo siehe edit..
aber das kann ja nicht sein, dass in dem Object auf einmal ein String ist, obwohl das Property vom Typ Point ist und auch ein gültiges Point Objekt als Startwert enthalten ist..

T
512 Beiträge seit 2006
vor 17 Jahren

Weißt du das ist ein Problem was ich mit der automatischen Codeerzeugung von VS habe. Die Leute benutzen Dinge die sie nicht verstehen. (damit will ich dich nicht angreifen)

Ich kenn mich jetzt mit den von VS erzeugten Settings nicht sonderlich aus. Schau mal wie dort die entsprechenden Properties im Code definiert sind.
Ich tippe mal darauf, dass dort ein ein Attribut vom Typ ConfigurationProperty(Attribute) definiert ist, und dort der String als DefaultValue angegeben ist. Das liegt einfach daran, dass man in Attributen nur primitive Typen (int, float, decimal, usw), Strings und den Typ 'Type' verwenden darf. Also kann man als DefaultValue so nicht einen Point zuweisen.
Außerdem wird dort noch ein Attribut sein (ich tippe mal auf TypeConverter(Attribute)) in dem die Klasse PointConverter als Converter ausgewiesen wird. Die Klasse kannst du dann auch benutzen um den String in einen Point zu konvertieren.

Wie gesagt, ich vermute das nur. Der letzte Satz gilt trotzdem auch wenn der Rest nicht zutrifft 😁

e.f.q.

Aus Falschem folgt Beliebiges

JunkyXL Themenstarter:in
1.665 Beiträge seit 2006
vor 17 Jahren

Den letzten Satz finde ich auch treffend.
Werds mir mal antun...

T
512 Beiträge seit 2006
vor 17 Jahren

Benutz halt einfach die PointConverter-Klasse um den String in einen Point umzuwandeln.
Der Rest von dem Text war nur Beiwerk um die Frage zu beantworten warum es überhaupt ein String ist. Ändern wirst du es nicht können, ohne dich von der automatischen Generierung zu verabschieden. Was eigentlich unnötig ist für das kleine Problemchen.

e.f.q.

Aus Falschem folgt Beliebiges

369 Beiträge seit 2006
vor 17 Jahren

Überprüfe nocheinmal, ob im Ressourcen-Designer auch alles richtig eingetragen ist: Wenn ich dort System.Drawing.Point auswähle wird bei mir der Code richtig generiert...

(autogenerierter Code)


public global::System.Drawing.Point Setting
{
    //...
}

JunkyXL Themenstarter:in
1.665 Beiträge seit 2006
vor 17 Jahren

Original von Kabelsalat
Überprüfe nocheinmal, ob im Ressourcen-Designer auch alles richtig eingetragen ist: Wenn ich dort System.Drawing.Point auswähle wird bei mir der Code richtig generiert...

(autogenerierter Code)

  
public global::System.Drawing.Point Setting  
{  
    //...  
}  
  

[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("0, 0")]
public global::System.Drawing.Point SettingsDialogLocation {
   get {
      return ((global::System.Drawing.Point)(this["SettingsDialogLocation"]));
   }
set {
      this["SettingsDialogLocation"] = value;
   }
}

Das steht ja soweit richtig drin. Entscheidend ist denke ich eher das:
[global::System.Configuration.DefaultSettingValueAttribute("0, 0")]

Das wird das sein, was Traumzauberbaum gemeint hat oder so in der Richtung eben.
Mh ich würde ja gerne die PointConverter Klasse benutzen aber irgendwie habe ich da ein unwohles Gefühl dabei.. Scheint mir nicht elegant, aber die Einzige Möglichkeit, wie es scheint, wenn ich das Ganze weiterhin automatisiert halten will.