Forum: PC-Programmierung c# werte in versch. klassen zur verfügung haben


von c#-Anfänger (Gast)


Lesenswert?

hallo,
ich habe ein kleines (konzeptionelles) Problem bei dem ich nicht richtig 
weiß ich ich es lösen soll:

ich habe eine Form1 welche beim Programmstart geladen wird, dann habe 
ich noch eine klasse "einstellungen" und eine weitere klasse "hardware".

Beim Programmstart (form1_load) lese ich den Ausführungspfad meines 
Programms. Anschließend prüfe ich in der klasse "Einstellungen" ob ich 
unter diesem Pfad eine Datei names settings.ini finde, ist sie nicht da 
wird sie mit defaultwerten erstellt, soweit kein Problem.

Wenn ich nun aber in meiner Form1 auf einen Button klicke möchte ich, 
dass in der klasse "Hardware" eben meine Hardware initialisiert wird.
Dazu benötige ich das ini-file und auch den Pfad zu selbigen.

Jetzt mein Problem:
Der filepath zum inifile sollte eignetlich (der Übersicht halber) in der 
klasse Einstellungen irgendwo statisch gespeichert werden, was aber 
nicht geht. Also habe ich 2 Möglichkeiten:

1. ich rufe jedes mal wenn ich in der klasse Hardware den filepath 
benötige die "Application.StartupPath" auf, das finde ich aber recht 
unschön da ich hier dann jedes mal dem string noch den Dateinamen 
anhängen muss. wenn sich der Dateiname ändert muss ich das an zig 
Stellen im code ändern!

2. ich speichere den filepath in der form1 und hole mir den string durch 
eine GetFilePath, finde ich aber genauso unschön da der Pfad zum 
settingfile nicht unbedingt in die Form1 gehört (hat ja nichts damit zu 
tun!?)

Wie löst man soetwas im allgemeinen als alter Hase?

von Christopher (Gast)


Lesenswert?

Definiere doch einfach eine Öffentliche Konstante mit dem dateinamen und 
einen Öffentlichen String mit dem Pfad des Programms in der Klasse 
Einstellungen. Den Pfad weist du in FormLoad zu. Dann erstellst du ein 
GetFilePath und returnst Pfad + "\\" + Dateiname

von c#-Anfänger (Gast)


Lesenswert?

genau das funktioniert nicht :-/

Ich kann über set dann zwar den wert in der klasse Einstellungen 
setzten, aber sobald ich die klasse verlasse ist beim nächsten aufruf 
der wert wieder gelöscht.

Was mache ich falsch dass der Pfad nicht gespeichert wird?

1
namespace program
2
{
3
    class Einstellungen
4
    {
5
        public string pathToSettingFile;
6
        ...
7
    }
8
}

von Sven H. (dsb_sven)


Lesenswert?

Ein bisschen mehr Quellcode würde die Lösung des Problems sicherlich 
schneller vorantreiben.

von Christopher (Gast)


Lesenswert?

Initialisiert du Sie neu oder Rufst du Sie nur erneut auf?

von c#-Anfänger (Gast)


Lesenswert?

hab's gerade selbst hin gebracht.
nachdem christopher geschrieben hatte dass das eignetlich doch geht, 
vermutete ich meinen Fehler in der Nennung von namespace und class, das 
Problem war aber die fehlende Bekanntmachung der classe Form1 in 
Einstellungen!

Dennoch Danke!

von raketenfred (Gast)


Lesenswert?

für variabelen, die ich überall brauche, die sich nicht verändern 
etc(also Konfiguration u.Ä.) habe ich meist eine config klasse, in der 
alle variabelen public und static sind, dann kann man in allen anderen 
klassen einfach die variabele aufrufen:

config.Version=102;

von Arc N. (arc)


Lesenswert?

c#-Anfänger schrieb:
> Jetzt mein Problem:
> Der filepath zum inifile sollte eignetlich (der Übersicht halber) in der
> klasse Einstellungen irgendwo statisch gespeichert werden, was aber
> nicht geht. Also habe ich 2 Möglichkeiten:
>
> 1. ich rufe jedes mal wenn ich in der klasse Hardware den filepath
> benötige die "Application.StartupPath" auf, das finde ich aber recht
> unschön da ich hier dann jedes mal dem string noch den Dateinamen
> anhängen muss. wenn sich der Dateiname ändert muss ich das an zig
> Stellen im code ändern!

1. Welches OS lässt denn Schreibzugriffe in diesem Verzeichnis zu...oder 
muss die Anwendung zwingend mit Administratorrechten laufen?
http://msdn.microsoft.com/en-us/library/system.environment.specialfolder.aspx
2. Es dürfen auch die ApplicationSettings verwendet werden, die fast 
alles automatisch übernehmen (Solution -> Project Name -> Properties -> 
Settings)
http://msdn.microsoft.com/de-de/library/system.configuration.applicationsettingsbase(v=vs.80).aspx

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.