Array in den Settings möglich
- VB.NET
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von oobdoo.
-
-
@oobdoo Probier mal die
ArrayList
, die ist allerdings untypisiert.
Ob das funktioniert, weiß ich nicht.Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
-
Dein Array ist ein Byte-Array.
Wenn du Settings anlegst kannst du ja den Datentyp mittels Combobox bestimmen. Wird Byte-Array da angeboten?
Meines Wissens nicht.
Man kann es allerdings ziemlich leicht hacken, aber ich hab vergessen wie das geht.
Meine Überlegung ist einfach, dasByte()
mitConvert.ToBase64String
in einenString
zu überführen, und den in die Settings tun. -
@oobdoo Dann mach Dir einfach eine eigene serialisierbare Settings-Klasse und pack da rein, was immer Du brauchst.
Ich hab hier ein Beispiel in C#:
Settings C#-Quellcode
- using System.IO;
- using System.Xml.Serialization;
- namespace MySettings
- {
- /// <summary>
- /// Serialisierbare Klasse, die Parameter hält
- /// </summary>
- public class MySettings
- {
- /// <summary>
- /// Der Name der Settings
- /// </summary>
- public string Name { get; set; }
- /// <summary>
- /// Property 1
- /// </summary>
- public bool Property1 { get; set; }
- /// <summary>
- /// Property 2
- /// </summary>
- public int Property2 { get; set; }
- /// <summary>
- /// ein Byte-Array
- /// </summary>
- public int[] MyArray { get; set; }
- /// <summary>
- /// Standardkonstruktor der Klasse MySettings
- /// </summary>
- public MySettings()
- {
- this.Name = "Empty";
- this.Property1 = true;
- this.Property2 = 42;
- this.MyArray = new int[] { 1, 2, 3, 4, 5 };
- }
- /// <summary>
- /// Standardkonstruktor der Klasse MySettings
- /// </summary>
- /// <param name="name">Name der Settings</param>
- public MySettings(string name)
- : this()
- {
- this.Name = name;
- }
- }
- /// <summary>
- /// Klasse, die die Settings speichert und lädt
- /// </summary>
- public static class SettingsHandling
- {
- /// <summary>
- /// Speichern der Settings als XML-Datei
- /// </summary>
- /// <param name="settings">zu speichernde Settings</param>
- /// <param name="path">Pfad zum Speichern</param>
- public static void WriteSettings(MySettings settings, string path)
- {
- if (settings == null)
- {
- return;
- }
- // Serialize object to a text file.
- using (StreamWriter sw = new StreamWriter(path))
- {
- XmlSerializer x = new XmlSerializer(settings.GetType());
- x.Serialize(sw, settings);
- }
- }
- /// <summary>
- /// Laden der Settings
- /// </summary>
- /// <param name="path">Name der Settings</param>
- /// <returns>Pfad zum Laden</returns>
- public static MySettings ReadSettings(string path)
- {
- MySettings settings = new MySettings();
- try
- {
- // Deserialize text file to a new object.
- using (StreamReader sr = new StreamReader(path))
- {
- XmlSerializer x = new XmlSerializer(settings.GetType());
- settings = (MySettings)x.Deserialize(sr);
- }
- }
- catch
- {
- // nix tun, die Settings-Instanz ist nicht valid,
- // es werden die Default-Werte zurückgegeben
- }
- return settings;
- }
- }
- }
Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
Naja, so wichtig ist es mit der Umsetzung nicht. Wie gesagt, ich wollte nur allgemein Wissen ob es machbar ist.
Dazu ist mir noch eingefallen, man könnte die Zahlenkolonne 255, 195, 195, 195, 195,... auch als als normalen String in den Settings ablegen und und entsprechend umwandeln.Aktuelles Projekt: Z80 Disassembler für Schneider/Amstrad CPC
-
jo, das wäre aber langsam, speicherfressend, und v.a. vergleichsweise unsicher.
Also eine Umwandlung wirst du so oder so coden müssen, und da empfehle ich haltConvert.ToBase64String()/.FromBase64String()
- da ist genau definiert, was gemacht wird.
Selbstgebastelte StringParsereien gehen leicht immer wieder mal ins Auge, auch in diesem einfachen Fall. -
@oobdoo
Im folgenden Thread habe ich mich einmal damit versucht - und zwar mit einer List (Of T)...
benutzerdefinierte Liste in den Settings speichern
Ob's mit einem Array geht, weis ich nicht... -
-
Ich hab's jetzt probiert...
Bei den Settings-Einstellungen einfach auf<>Code anzeigen
gehen und folgende Klasse inSettings.vb
erstellen
Settings.vb VB.NET-Quellcode
- Imports System.Configuration
- Namespace My
- Partial Friend NotInheritable Class MySettings
- <UserScopedSettingAttribute()> _
- Public Property myIntArray As Integer()
- Get
- Return CType(Me("myIntArray"), Integer())
- End Get
- Set(ByVal value As Integer())
- Me("myIntArray") = value
- End Set
- End Property
- End Class
- End Namespace
Damit erstellt man sich in den Settings diemyIntArray
-Eigenschaft und kann sie dann verwenden...
Test VB.NET-Quellcode
- Private Sub Button_Click(sender As Object, e As EventArgs) Handles Button1.Click
- If My.Settings.myIntArray Is Nothing Then
- MessageBox.Show("Es gibt noch keine Daten...", "My.Settings.myIntArray")
- '
- Dim myArray As Integer() = {1, 2, 3}
- My.Settings.myIntArray = myArray
- MessageBox.Show("jetzt mit Daten gefüllt...", "My.Settings.myIntArray")
- Application.Exit()
- Else
- MessageBox.Show("Neustart: Jetzt gibt es Daten...", "My.Settings.myIntArray")
- Dim x = My.Settings.myIntArray
- '
- Stop
- Return
- End If
- End Sub
Und die Settings-Daten werden dann im PfadC:\Users\*****\AppData\Local\My\*****\user.config
abgelegt und können nach einem Neustart wieder verwendet und geändert werden...
user.config.xml XML-Quellcode
- <?xml version="1.0" encoding="utf-8"?>
- <configuration>
- <configSections>
- <sectionGroup name="userSettings">
- <section name="My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
- </sectionGroup>
- </configSections>
- <userSettings>
- <My.MySettings>
- <setting name="myIntArray" serializeAs="Xml">
- <value>
- <ArrayOfInt xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <int>1</int>
- <int>2</int>
- <int>3</int>
- </ArrayOfInt>
- </value>
- </setting>
- </My.MySettings>
- </userSettings>
- </configuration>
-
-
Ähnliche Themen
-
5 Benutzer haben hier geschrieben
- oobdoo (4)
- VB1963 (2)
- RodFromGermany (2)
- ErfinderDesRades (2)
- Eddy (1)