# Zeit addieren



## Becks187 (23. Januar 2008)

Hallo ich würde gerne zum Timer 15 Minuten addieren.
Meint:

Die Zeit wird angezeigt, ich drücke einen Button, dann soll die neue Zeit +15min sein.


----------



## Alex F. (23. Januar 2008)

Dateadd("n",15,now)

Grüsse bb


----------



## Becks187 (23. Januar 2008)

mhm also um 9.30Uhr hat er mir dann 3947 daraus gemacht 

So sieht das ganze bei mir aus:

dim a as double

Private Sub ticket_Click()
a = DateAdd("n", 15, Now)
ewurf.Text = a
end sub

Mir ist gereade aufgefallen das er immer 3947 daraus macht. :suspekt:


----------



## Alex F. (23. Januar 2008)

du solltest a nicht als double sondern als date variable deklarieren. Intern ist die Zeit zwar eine Double aber für die Formatierung ist die 3947 etwas gewöhnungsbedürftig.

Grüsse bb


----------



## Becks187 (23. Januar 2008)

dann steht da bei mir 23.04.2009 :suspekt:


----------



## Becks187 (23. Januar 2008)

dann steht da bei mir 23.04.2009 :suspekt:


----------



## Alex F. (23. Januar 2008)

noch mal langsam 

```
Dim a As Date
a = DateAdd("n", 15, Now)
MsgBox (Format(a, "HH:NN:SS"))
```

Grüsse bb


----------



## Becks187 (23. Januar 2008)

Super, aber wie bekomme ich das jetzt in eine Textbox?

text1.text= a    (funktioniert so nicht)
text1.text=a ("HH:NN:SS")  (funktioniert auch nicht.)

Danke für deine Mühen


----------



## port29 (23. Januar 2008)

text1.text = Format(a, "HH:NN:SS")


----------



## Becks187 (23. Januar 2008)

boing 

Super DANKE!


----------



## LL0rd (23. Januar 2008)

Ich bin nur per Zufall auf deinen Thread gestoßen, bin selber kein VB Programmierer (komme aus der C# Welt), deshalb kenne ich die Syntax von VB auch nicht so gut, aber ich kann dir noch einen Tipp auf den Weg mitgeben: 

Nutze IntelliSense, es gibt dir zahlreiche Informationen und Hilfestellungen beim Schreiben von Quellcode. z.B. text1.text "ist" ein String. a ist ein Datum. Wenn du die gleichsetzt, ist es, als ob du ein U-Boot auf einem Flughafen parken möchtest. Aber du kannst z.B. auch einen kleinen sich an Board befindenden Hubschrauber losschicken, der dann auf dem Flughafen landet. (Jedes Objekt in .Net ist von "object" abgeleitet und enthällt eine .ToString() - ich glaube in VB ist es ohne die Klammern am Ende - Methode, die dir aus jedem Objekt einen mehr oder weniger sinnvollen String zaubert.)


```
text1.text=a ("HH:NN:SS")
```

Bis vor ein paar Tagen habe ich so eine Syntax noch nicht gesehen. Merken: Bei Anweisungen muss es immer eine Verbindung zwischen den einzelnen Elementen vorhanden sein. Es wird entweder ein mathematisches Zeichen (+-*/), ein Punkt für eine Submethode / Subeigenschaft oder eine Klammer ( "()" um ein Element reinzuwerfen oder "<> für generics"). Eine kleine Ausnahme ist, wenn du sachen Castest, dort schreibst du dann z.B. Integer i = (Integer) object; (C# Syntax). 

Das, was du geschrieben hast, geht schon etwas in Richtung LINQ, aber das ist eine andere Geschichte.


----------



## Becks187 (23. Januar 2008)

Mhm danke, das mit dem UBoot und dem Flugzeug habe ich verstanden den Rest eher nicht so.
Also man muss sich eben sicher sein was man als was deklariert...?!
(Das ist das, was ich aus deinem Eintrag entnehmen.)


----------



## Becks187 (23. Januar 2008)

wie bekomm ich denn jetzt dieses a (also die neue errechnete Zeit) in eine Text Box in einer neuen form?

Private Sub ticket_Click()
Form1.Show
End Sub

Private Sub Form_Load()
Text1.Text = a (format.....      <- was müsste denn jetzt da stehen?
End Sub

Merci


----------



## port29 (23. Januar 2008)

VB ist zwar nicht so Typgenau, wie C / C++ / C#, aber ich würde es dir trotzdem empfehlen, auf den Typ zu achten, den du verwendest. Bei dem Rest ging es um die Syntax der Programmiersprachen. Zwei Ausdrücke können nicht einfach so im Quelltext stehen, ohne irgendwie miteinander verbunden zu sein. Sei es arithmetisch, logisch oder als Argument. 

Eine Ausnahme dazu ist das sog. Casten von Variablen. Ich möchte jetzt ganz ehrlich zu dir sein, ich glaube nicht, dass ich es dir so auf die Schnelle erklären kann, dazu fehlt dir momentan noch das Basiswissen, was Objektorientiertes programmieren angeht. Nur ein kurzer Exkurs in die .Net Welt. ALLES basiert auf einem Typ "Object" und hat somit auch alle Methoden von "Object"

Kleines Beispiel in C#


```
int i = 0;
            Object testObj = (Object)i;
            String testString = (String)testObj; // <-- hier wird ein Fehler auftauchen
            MessageBox.Show(i.ToString());
```

Was macht der Code, er definiert eine Integer Variable i und setzt die auf 0 (btw. 0 ist nicht null). Dann geht es den Hierarchiebaum hoch, aus i wird ein "Object" gemacht. Und aus dem Object wird dann versucht einen String zu casten. Das funktioniert nicht (Uboot mit Flughafen). Die letzte Zeile macht es jetzt etwas anders. Da ALLES eine ToString() Methode hat, kann man auch dementsprechend von jedem Objekt ein String abrufen. Und das funktioniert auch in diesem Fall.

Ich hoffe, es ist dir etwas klargeworden.


----------



## port29 (23. Januar 2008)

Becks187 hat gesagt.:


> wie bekomm ich denn jetzt dieses a (also die neue errechnete Zeit) in eine Text Box in einer neuen form?
> 
> Private Sub ticket_Click()
> Form1.Show
> ...



Sorry, aber kannst du mal bitte kurz aufsplitten, welcher Code nun zur welcher Form gehört? Meine VB Zeit war mit der 6er Version zuende, von da an habe ich nur C# geschrieben, aber soweit ich mich noch erinnern kann, kannst du auf die Form Elemente direkt zugreifen. Also:

Form1.Text1.Text=Format(a, "HH:NN:SS")


----------



## Becks187 (24. Januar 2008)

Danke für deine Mühen 

Also ich habe die erste Form die aufgerufen wird da gibt es diesen Befehl:

Private Sub ticket_Click()
Form1.Show
End Sub

(Ein Button wird gedrück, die nächste Form erscheint!)

Dort gibt es diesen Befehl:

Private Sub Form_Load()
Label1.Caption = Date & vbCrLf & Time & vbCrLf & "Leo-Brandt-Straße" & vbCrLf & "Parkdauer bis:"
End Sub

(Ein Label wird gezeigt. Hinter   oder unter Parkdauer bis: soll jetzt die neu errechnete Zeit zulesen sein. Die in meiner erseten Form so gezeigt wurde: parkd.Text = Format(a, "HH:NN:SS") und so zustande kam: a = DateAdd("n", z, Now))

Hoffe das ist jetzt verständlich.


----------



## Alex F. (24. Januar 2008)

Hierfür solltest du dir die Gültigjkeitsbereiche von Variablen mal anschauen.

a war bei dir in Form 1 als Prozedurvariable gekennzeichnet 
sub xxx
Dim a as date 

...
end sub 

um von ausserhalb darauf zu zugreifen solltest du dann allerdings entweder eine Funktion in einem Modul schreiben welche dir den Wert aus a zurück gibt oder deine Form um eine  Public Variable erweitern auf die du dann zugreifen kannst.

Dies wird mit den suchbegriffen "Variablen übergeben" "Formübergreifend" bei  mehr als einmal gefunden.

Grüsse bb


----------



## Becks187 (24. Januar 2008)

ich werd mal suchen, aber das dim a as date habe ich ganz oben hingeschrieben, also nicht in einen bestimmten sub (aber ob das was heißt )


----------



## port29 (24. Januar 2008)

Du musst immer den vollen Pfad angeben, wenn du auf Variablen zugreifen möchtest. Also nochmal in Kürze (keine Garantie, bin C# Coder).

Du hast zwei Forms, die eine ist die mit dem Button, der angeklickt wird. Der Name ist mir / uns bisher unbekannt.
Die zweite ist Form1.

In der ersten Form hast du eine globale Variable deklariert, auf die du aus Form1 zugreifen möchtest. Aber hier musst du auch den Pfad zu a angeben, es reicht nicht aus, wenn du einfach nur a schreibst, es muss schon Formname.a heißen.


----------



## Becks187 (24. Januar 2008)

Ja das hab ich auch schon ausprobiert.
Ich hatte das so geschrieben.
(Das war es noch eine TextBox in die ich in Form1 a schreiben wollte)

text1.text= form1.a

hat aber leider auch nicht funktioniert.
Naja, ich habs jetzt alles in eine Form gemacht.


----------



## Alex F. (24. Januar 2008)

Wenn er dim geschrieben hat ist die Variable Private also nicht von aussen sichtbar.

Ich denke das er hier allerdings erst einmal die Konzepte verstehen sollte statt einfach

Public a as date

und dann mit 
x= Form1.a 

darauf zu zu greifen. Denn *das ist schlechter Stil*

Grüsse bb

PS: die dirty lösung ist damit gegeben


----------



## port29 (24. Januar 2008)

An dieser Stelle muss auch ich mal eine Frage stellen. Sind in VB alle (globalen) Variablen statisch? Für mich als C#er ist es leider so ein Unding, wenn ich direkt auf die Variablen einer Klasse zugreife und nicht erst über eine Instanz gehe.


----------



## Alex F. (24. Januar 2008)

Klassen in VB  also da es sich hier um ein -vb6 Forum handelt sind die Klassen und Objekte nur rudimentär umgesetzt. VB6 ist in dem Sinne keine Klassen/Objektorientierte Sprache. Des wegen habe ich ja auch etwas von *schlechtem* Stil und gutem Stil geschrieben. 

Wenn man sich in VB6 an die "guten" Programmierparadigmen hält hat man auch in anderen Programmiersprachen wenig Probleme.

Grüsse bb

PS: in vb.net wurde viel gut gemacht allerdings sind die Unterschiede zu Vb6 so gross das man auch direkt c# lernen kann


----------



## Becks187 (24. Januar 2008)

ohweia....
Also 1. ist der der eine die :suspekt:
2. mache ich das ja nur um ein halbwegs benutzerfreundliches Programm zu schreiben um Messungen zu machen (irgendwann mal)
Heißt ich habe leider keine richtige Ausbildung darin. Ich hab bis jetzt nur kleine Routinen geschrieben, aber ob die schön waren oder nicht....  dem Lehrer war's egal 
Also bin ich auch schon mit ner unschönen Variante zufrieden ;-)


----------



## Becks187 (24. Januar 2008)

Aber mein programmierter Parkautomat (war ja nur ein Test) ist jetzt fertig.
Danke für eure Hilfe.


----------

