# Hilfe in Microsoft Visual C => Variable von Form1 in Form2 aktuallisiert durchreichen



## Neger für alles... (24 Oktober 2010)

*Hilfe in Microsoft Visual C => Variable von Form1 in Form2 aktuallisiert durchreichen*

Hallo,

bin neu auf diesem Gebiet,
Ich habe eine Frage an euch,
wie kann ich z.B. eine Variable die in Form1 ständig aktuallisiert wird,
auch in Form2 anzeigen?

Habe mal ein kleines Progrämmchen gemacht, vielleicht könnt ihr so mein Problem nachfolziehen?

Delegator die Lösung?
Was, wie geht das?

--danke--*ROFL*


----------



## Rainer Hönle (24 Oktober 2010)

Variable in Form 2 als Eigenschaft implementieren, der Form 1 die Form 2 bekannt machen (Referenz darauf) und dann von Form 1 aus  die Eigenschaft in Form 2 aktualisieren, wenn sich der Wert der Variablen in Form 1 geändert hat.


----------



## Jochen Kühner (24 Oktober 2010)

*CSharp*

Wenn schon CSharp gemeint ist, dann bitte auch in der Überschrift so schreiben!

Wer ruft welche Form auf? Wird Form2 von Form1 aus geöffnet? Oder umgekehrt?

Du kannst auch die Variable als Public Property der Form1 anlegen, und beim Öffnen der Form2 dieser die Instanz der Form1 mitgeben.
(Hab mir dein Programm jetzt aber nicht angeschaut...)


----------



## Neger für alles... (24 Oktober 2010)

Könnt ihr mein Progrämmchen so abändern und wieder als Zip einstellen?


----------



## Jochen Kühner (24 Oktober 2010)

*So...*

Hab dir mal ein Beispiel gemacht, aber ist nur eines von vielen.

Es kommt halt an was genau dein Programm bewirken soll. Genauso kannst du auch das Steuerelement selbst public machen!


----------



## Neger für alles... (26 Oktober 2010)

*--danke--*

Hallo,

so etwas habe ich gesucht,
vielen Dank,

vielleicht brauche ich nochmals Hilfe...


----------



## Jochen Kühner (26 Oktober 2010)

Wenn da Frag einfach wieder...


----------



## Neger für alles... (24 November 2010)

*Weiteres Problem*

Hallo,
ich möchte überprüfen ob es auf der Festplatte auf einem bestimmten Pfad einen Ordner gibt, wenn nicht automatisch einen anlegen.

Anschließend möchte ich in dieses Ordner in eine .txt Textdatei schreiben,

allerdings kommt ein Fehler nur beim ersten mal, wenn er den Ordner mit der Datei erstellt hat,
wie bekomme ich das weg?
Irgendwas greift noch auf die Datei zu, aber wer?

Im Anhang der Quellcode:

-danke für die Antwort-


----------



## Jochen Kühner (24 November 2010)

Neger für alles... schrieb:


> Hallo,
> ich möchte überprüfen ob es auf der Festplatte auf einem bestimmten Pfad einen Ordner gibt, wenn nicht automatisch einen anlegen.
> 
> Anschließend möchte ich in dieses Ordner in eine .txt Textdatei schreiben,
> ...



Also Ich kapier jetzt deine Beschreibung nicht ganz, was kommt für ein Fehler?

und wenn du in deinem Code schon Variablen anlegst in denen du die Pfadangaben kombinierst, dann verwende die doch auch...

Hab deinen Code etwas angepasst das er schöner aussieht, aber nicht geprüft...

Pfadangaben kannst du auch über System.IO.Path.Combine zusammenfügen (Platformunabhänig)

```
// Variable für Datei anlegen
                string Dateiname = (DateTime.Now.Month.ToString()) + "_" + DateTime.Now.Year.ToString();
                string aktueller_ordner = "D:\\LOGDATEI\\" + DateTime.Now.Year.ToString();
                string aktuelle_datei = aktueller_ordner + "\\" + Dateiname + ".txt";

                // Prüfen ob Pfad voranden ist, wenn nicht anlegen
                if (!System.IO.Directory.Exists(aktueller_ordner))
                {
                    System.IO.Directory.CreateDirectory(aktueller_ordner);
                }  

                // Prüfen ob Datei vorhanden ist, wenn nicht anlegen
                if (!System.IO.Directory.Exists(aktuelle_datei))
                {
                    System.IO.File.Create(aktuelle_datei);
                }


            // Datei beschreiben
                double Oberflaechenspannung = 5.354;
                System.IO.StreamWriter SW = new System.IO.StreamWriter(aktuelle_datei,true);
                SW.WriteLine("Sita am " + DateTime.Now.ToShortDateString() + "    " + DateTime.Now.ToLongTimeString());
                SW.WriteLine("Oberflächenspannung: 16");
                SW.WriteLine("Testkjhsdfkjhsdkfhkjh: 515");
                SW.WriteLine("Tekjhdkjfhkjh: 521");
                SW.WriteLine("---------------------------------------------------------------------");
                SW.Close();
```


----------



## david.ka (25 November 2010)

Hallo,

kannst du mal bitte die Exception posten?
-> kann es ggf. sein, dass CreateFile die Datei blockiert?
--> der StreamWriter kann auch die Datei anlegen => CreateFile = überflüssig.


----------



## Neger für alles... (25 November 2010)

*Hier die Fehlerbeschreibung*

Das Programm soll auf der Festplatte prüfen ob ein Ordner vorhanden ist, wenn nicht diesen anlegen.

Anschließend in dieses Ordner, der eine .txt Textdatei enthält etwas rein schreiben.

Doch allerdings geht das hintereinander bei meinem Programm nicht, da etwas die Datei noch auf hat und dadurch schreiben blockiert wird


----------



## Jochen Kühner (26 November 2010)

Wenn du

```
System.IO.File.Create("D:\\LOGDATEI\\" + DateTime.Now.Year.ToString()+"\\" + Dateiname+".txt");
```

durch 

```
FileStream aa = System.IO.File.Create("D:\\LOGDATEI\\" + DateTime.Now.Year.ToString()+"\\" + Dateiname+".txt");
 = System.IO.File.Create(aktuelle_datei);
aa.Close();
```

ersetzt, dann gehts.

File.create erzeugt immer ein Filestream Objekt, auch wenn du es keiner Variable zuweist. Dadurch das du aber das filestream Objekt nicht explizit schliest, wird dies dann erst später bei dispose dorch den GarbageCollector gemacht, doch der wird noch nicht aufgerufen bis du das nächste mal auf deine Datei zugreifst!


----------



## david.ka (26 November 2010)

der StreamWriter kann dir die Datei auch erzeugen, voll-automatisch.
warum nutzt du das nicht?

grüße
David


----------



## Neger für alles... (27 November 2010)

Jochen Kühner schrieb:


> Wenn du
> 
> ```
> System.IO.File.Create("D:\\LOGDATEI\\" + DateTime.Now.Year.ToString()+"\\" + Dateiname+".txt");
> ...


###################################################

 Vielen Dank, jetzt geht es so wie ich mir das Vorgestellt habe


----------



## Neger für alles... (2 Dezember 2010)

*Diagramm Aktualisieren*

Hallo Jochen,

muss dich leider nochmals mit einem Problem belasten...

Ich habe nun bei Microsoft das Chart Contorl runtergeladen damit ich ein Diagramm zeichnen kann.
Später sollte ich mal Temperaturen aufzeichen.
Habe dir im Anhang ein Beispiel;

Hast du ne Ahnung, wenn man in der Tabelle neue Werte einträgt, wie sich dann das Diagramm automatisch aktuallisiert, wie man es aus Exsel gewohnt ist?
Oder gibt es eine Methode (z.B. Refresh) damit das Diagramm aktuallisiert wird?

mit freundlichen Grüßen


----------



## Larry Laffer (3 Dezember 2010)

Hallo,
die Werte werden an den Chart ähnlich wie bei einer Listbox übergeben :
	
	



```
chart1.Series["Series1"].Points.AddY(myPoint);
```
... das geht natürlich auch genau so mit den X-Koordinaten ...

Gruß
Larry


----------



## Neger für alles... (3 Dezember 2010)

*Was ehist das nun?*

Also das heist es gibt keine automatische aktuallisierung?
Evtl. mit einem Timer die Sache starten?


----------



## Larry Laffer (4 Dezember 2010)

Hallo ...

Nein, eine automatische Aktualisierung gibt es meines Wissens nicht.
Das macht die Siemens-Visu btw. auch nicht. Hier wird z.B. auch ein Trigger abgefragt (sehr wahrscheinlich zyklisch über eine Timer-Funktion) und bei dessen Änderung dann der Datenbereich geladen und an die Anzeige (Chart) übertragen. Das müßtest du nun zu Fuß machen.
Du könntest dir aber auch für die benötigten Unterfunktionalitäten den Chart in eine eigene Klasse übernehmen (Inherits) und die gewünschten Dinge drum herum programmieren. Da kann ich dir dann allerdings nicht so sehr helfen da C-Sharp nicht so mein Ding ist (ich würde es halt in VB machen ).

Gruß
Larry


----------



## Jochen Kühner (5 Dezember 2010)

Neger für alles... schrieb:


> Also das heist es gibt keine automatische aktuallisierung?
> Evtl. mit einem Timer die Sache starten?



also Ich nutze dieses Beispiel Control ja auch in meinem ConnectionLibrary Beispiel Programm, und da erzeuge Ich die Punkte einfach bei einer änderung jedes mal neu:

Codeauszug:

```
chart1.Series["Series1"].Points.Clear();
                    var tmp = (LibNoDaveValue) var1.SelectedItem;
                    foreach (var oldValue in tmp.OldValues)
                    {
                        double wrt = (float) Convert.ToDouble(oldValue);
                        chart1.Series["Series1"].Points.AddY(wrt);
                    }
```

Ich weiß nicht wie das mit Databinding und diesem Control aussieht, und ob das überhaupt möglich ist.

In WPF sieht das ganze schon wieder anders aus, dort gibt's ein mächtiges Databinding, und mit entsprechenden Controls geht da das automatische aktualisieren sicher.


----------

