Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > .NET Languages
You last visited: Today at 14:40

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[VB2010] Timer per Buttonclick

Discussion on [VB2010] Timer per Buttonclick within the .NET Languages forum part of the Coders Den category.

Reply
 
Old   #1
 
ChilloutFuzi's Avatar
 
elite*gold: 217
Join Date: Mar 2012
Posts: 413
Received Thanks: 53
[VB2010] Timer per Buttonclick

Hey,
Ich hab ma eine Frage und zwar wollte ich wissen ob es möglich ist in Visual Basic einen Button zu Programmieren das er einen vb.Timer erstellt und man von diesem die Funktion festlegen kann und am Schluss sollte es so aussehen das man unendlich oft einen vb.Timer erstellen kann.
ChilloutFuzi is offline  
Old 06/28/2014, 19:13   #2

 
Ravenstorm's Avatar
 
elite*gold: 0
The Black Market: 100/0/0
Join Date: Jan 2010
Posts: 13,150
Received Thanks: 3,206
Einen VB.timer oder einen Uhrzeitentimer ?
Ravenstorm is offline  
Old 06/28/2014, 19:31   #3
 
ChilloutFuzi's Avatar
 
elite*gold: 217
Join Date: Mar 2012
Posts: 413
Received Thanks: 53
einen VB.timer
ChilloutFuzi is offline  
Old 06/29/2014, 11:19   #4




 
stotterer09's Avatar
 
elite*gold: 26
Join Date: Dec 2010
Posts: 2,628
Received Thanks: 1,816
wenn du den Timer als Attribut der Klasse haben willst dann einfach
Code:
Public Class Form1

Dim timer(100) As Timer
Dim i As int= 0
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Timer(i) = new timer
i = i+1 
end sub
End Class
Eine Sache ist blöd daran man muss vorher wissen wv Timer man erstellen will
Um das zu umgehen müsstest du mit list arbeiten
stotterer09 is offline  
Thanks
1 User
Old 06/29/2014, 12:35   #5
 
elite*gold: 46
Join Date: Oct 2010
Posts: 782
Received Thanks: 525
Quote:
Originally Posted by stotterer09 View Post
wenn du den Timer als Attribut der Klasse haben willst dann einfach
Code:
Public Class Form1

Dim timer(100) As Timer
Dim i As int= 0
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Timer(i) = new timer
i = i+1 
end sub
End Class
Eine Sache ist blöd daran man muss vorher wissen wv Timer man erstellen will
Um das zu umgehen müsstest du mit list arbeiten
Muss man nicht wissen und man muss nicht mit Listen arbeiten.
Code:
Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim timer As New Timer()
        AddHandler timer.Tick, AddressOf Timer_Tick
        timer.Interval = 1337
        timer.Start()
        Container.Add(timer)
    End Sub

    Private Sub Timer_Tick(ByVal sender As Object, ByVal e As EventArgs)
        'Add Code here.
    End Sub
End Class
Edit: Außerdem was meinst du mit Timer als Attribut der Klasse ?
th0rex is offline  
Thanks
1 User
Old 06/29/2014, 14:03   #6




 
stotterer09's Avatar
 
elite*gold: 26
Join Date: Dec 2010
Posts: 2,628
Received Thanks: 1,816
Quote:
Originally Posted by omitma View Post
Muss man nicht wissen und man muss nicht mit Listen arbeiten.
Code:
Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim timer As New Timer()
        AddHandler timer.Tick, AddressOf Timer_Tick
        timer.Interval = 1337
        timer.Start()
        Container.Add(timer)
    End Sub

    Private Sub Timer_Tick(ByVal sender As Object, ByVal e As EventArgs)
        'Add Code here.
    End Sub
End Class
Edit: Außerdem was meinst du mit Timer als Attribut der Klasse ?

Ein Attribut ist eine Eigenschaft einer Klasse:
gehen wir davon aus wir haben eine Klasse Mensch dann ist ein Attribut von dem das Geschlecht

In meinem Fall ist der Timer ein Attribut der Klasse Form1 -> Man kann in der ganzen Klasse drauf zugreifen
In deinem Fall ist der Timer nur Lokal in der Methode -> Man kann eigentlich nur in der Methode drauf zugreifen

Somit haben beide Codes ihre schwächen

Bei meinem Code muss man vorher wissen wv man haben will
das hab ich dazu geschrieben um zu zeigen dass mein Code nicht super toll ist sondern nur eine Art es möglichst einfach zu machen
stotterer09 is offline  
Old 06/29/2014, 14:35   #7
 
elite*gold: 46
Join Date: Oct 2010
Posts: 782
Received Thanks: 525
Quote:
Originally Posted by stotterer09 View Post
Ein Attribut ist eine Eigenschaft einer Klasse:
gehen wir davon aus wir haben eine Klasse Mensch dann ist ein Attribut von dem das Geschlecht

In meinem Fall ist der Timer ein Attribut der Klasse Form1 -> Man kann in der ganzen Klasse drauf zugreifen
In deinem Fall ist der Timer nur Lokal in der Methode -> Man kann eigentlich nur in der Methode drauf zugreifen

Somit haben beide Codes ihre schwächen

Bei meinem Code muss man vorher wissen wv man haben will
das hab ich dazu geschrieben um zu zeigen dass mein Code nicht super toll ist sondern nur eine Art es möglichst einfach zu machen
Stimmt leider nicht. Ein Attribut ist sowas hier:
Code:
<Conditional("DEBUG")> 
Sub TraceMethod()
End Sub
Du redest von Membern (oder auch Variablen) der Klasse.


Außerdem ist mein Timer zwar nur Lokal, aber
Code:
Container.Add(timer)
fügt ihn den Controls hinzu, womit er sogar disposed wird, was bei deinem nicht der Fall ist.
Man kann auf jeden meiner Timer zugreifen.
Code:
For Each currentTimer As Timer In (From item As Object In Container.Components Where item Is timer).Cast(Of Timer)()
            'Oder was auch immer damit gemacht werden soll.
            MessageBox.Show(currentTimer.Interval.ToString())
        Next
Und du übergibst deinem Timer keine Funktion für das Tick Event wodurch er nichst machen wird.

Wenn man nicht Container benutzen möchte (oder kann lol. mir ist auch grade aufgefallen, dass der bei mir null ist. kp warum) kann man das ganze auch so machen:
Code:
Public Class Form1
    Private ReadOnly _allTimers As List(Of Timer) = New List(Of Timer)()

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim timer As New System.Windows.Forms.Timer()
        AddHandler timer.Tick, AddressOf Timer_Tick
        timer.Interval = 1337
        timer.Start()
        _allTimers.Add(timer)
    End Sub

    Private Sub Timer_Tick(ByVal sender As Object, ByVal e As EventArgs)

    End Sub
End Class
So kann man dann durch alle Timer loopen:
Code:
        For Each currentTimer As Timer In _allTimers
            'Mach was damit.
        Next
Falls der Topic Ersteller nicht nur Timer, sondern auch andere Objekte zur Laufzeit erstellen möchte, ist hier ein kleines Beispiel, wie man das lösen könnte ohne den Container zu nutzen:
Code:
Option Strict Off
Public Class Form1
    Private ReadOnly _allComponents As List(Of Object) = New List(Of Object)()

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim tmpTimer As New System.Windows.Forms.Timer()
        AddHandler tmpTimer.Tick, AddressOf Timer_Tick
        tmpTimer.Interval = 1337
        tmpTimer.Start()
        _allComponents.Add(tmpTimer)

        Dim nurEinBeispielFürEinAnderesControl As New TextBox()
        nurEinBeispielFürEinAnderesControl.Text = "Hallo :)"
        _allComponents.Add(nurEinBeispielFürEinAnderesControl)
    End Sub

    Private Sub ShowIntervalOfAllTimers()
        For Each currentTimer As Timer In _allComponents.OfType(Of Timer)()
            MessageBox.Show(currentTimer.Interval.ToString())
        Next
    End Sub

    Private Sub ShowTextOfAllTextBoxes()
        For Each currentTextBox As TextBox In _allComponents.OfType(Of TextBox)()
            MessageBox.Show(currentTextBox.Text)
        Next
    End Sub

    Private Sub Timer_Tick(ByVal sender As Object, ByVal e As EventArgs)

    End Sub
End Class
Edit: @Chillout dann nutz halt die Version mit der Liste. Bei mir ist der auch null. Hatte den Code halt vorher nicht getestet, weil ich davon ausgegangen bin, dass der Container dafür da ist alle Controls zu speichern.
th0rex is offline  
Thanks
2 Users
Old 06/29/2014, 14:46   #8
 
ChilloutFuzi's Avatar
 
elite*gold: 217
Join Date: Mar 2012
Posts: 413
Received Thanks: 53
Hab das jetzt im Button:
Quote:
Dim timer As New System.Windows.Forms.Timer()
AddHandler timer.Tick, AddressOf Timer_Tick
timer.Interval = 1337
timer.Start()
_allTimers.Add(timer)
und
das in der Form:
Quote:
Private ReadOnly _allTimers As List(Of Timer) = New List(Of Timer)()
und
das als Timer:
Quote:
Private Sub Timer_Tick(ByVal sender As Object, ByVal e As EventArgs)

End Sub
Funktioniert thx
___________________________________
Eine Frage hätte ich noch gibts eine möglichkeit die aktivien Timer zu speichern und beim nächsten Startvorgang der Form wieder zu starten ?
Ich hab es jetzt mit einer For schleife und my.settings gemacht die settings lass ich mit count zählen aber es werden nicht alle timer geladen.
ChilloutFuzi is offline  
Old 06/29/2014, 16:08   #9




 
stotterer09's Avatar
 
elite*gold: 26
Join Date: Dec 2010
Posts: 2,628
Received Thanks: 1,816
Quote:
Originally Posted by omitma View Post
Stimmt leider nicht. Ein Attribut ist sowas hier:
Code:
<Conditional("DEBUG")> 
Sub TraceMethod()
End Sub
Du redest von Membern (oder auch Variablen) der Klasse.


Außerdem ist mein Timer zwar nur Lokal, aber
Code:
Container.Add(timer)
fügt ihn den Controls hinzu, womit er sogar disposed wird, was bei deinem nicht der Fall ist.
Man kann auf jeden meiner Timer zugreifen.
Code:
For Each currentTimer As Timer In (From item As Object In Container.Components Where item Is timer).Cast(Of Timer)()
            'Oder was auch immer damit gemacht werden soll.
            MessageBox.Show(currentTimer.Interval.ToString())
        Next
Und du übergibst deinem Timer keine Funktion für das Tick Event wodurch er nichst machen wird.

Wenn man nicht Container benutzen möchte (oder kann lol. mir ist auch grade aufgefallen, dass der bei mir null ist. kp warum) kann man das ganze auch so machen:
Code:
Public Class Form1
    Private ReadOnly _allTimers As List(Of Timer) = New List(Of Timer)()

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim timer As New System.Windows.Forms.Timer()
        AddHandler timer.Tick, AddressOf Timer_Tick
        timer.Interval = 1337
        timer.Start()
        _allTimers.Add(timer)
    End Sub

    Private Sub Timer_Tick(ByVal sender As Object, ByVal e As EventArgs)

    End Sub
End Class
So kann man dann durch alle Timer loopen:
Code:
        For Each currentTimer As Timer In _allTimers
            'Mach was damit.
        Next
Falls der Topic Ersteller nicht nur Timer, sondern auch andere Objekte zur Laufzeit erstellen möchte, ist hier ein kleines Beispiel, wie man das lösen könnte ohne den Container zu nutzen:
Code:
Option Strict Off
Public Class Form1
    Private ReadOnly _allComponents As List(Of Object) = New List(Of Object)()

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim tmpTimer As New System.Windows.Forms.Timer()
        AddHandler tmpTimer.Tick, AddressOf Timer_Tick
        tmpTimer.Interval = 1337
        tmpTimer.Start()
        _allComponents.Add(tmpTimer)

        Dim nurEinBeispielFürEinAnderesControl As New TextBox()
        nurEinBeispielFürEinAnderesControl.Text = "Hallo :)"
        _allComponents.Add(nurEinBeispielFürEinAnderesControl)
    End Sub

    Private Sub ShowIntervalOfAllTimers()
        For Each currentTimer As Timer In _allComponents.OfType(Of Timer)()
            MessageBox.Show(currentTimer.Interval.ToString())
        Next
    End Sub

    Private Sub ShowTextOfAllTextBoxes()
        For Each currentTextBox As TextBox In _allComponents.OfType(Of TextBox)()
            MessageBox.Show(currentTextBox.Text)
        Next
    End Sub

    Private Sub Timer_Tick(ByVal sender As Object, ByVal e As EventArgs)

    End Sub
End Class
Edit: @Chillout dann nutz halt die Version mit der Liste. Bei mir ist der auch null. Hatte den Code halt vorher nicht getestet, weil ich davon ausgegangen bin, dass der Container dafür da ist alle Controls zu speichern.
du hast recht damit dass deine Timer zugreifbar sind


und mit List wie du es bei deinem zweiten code gemacht hast ist es am schönsten

und ja ich habe meinem Timer keine Funktion für das Tick Event übergeben

ich gebs ja zu mein code war schrott

achja
Attribute ist der deutsche Begriff für Member(steht jedenfalls so auf wikipedia)
http://de.wikipedia.org/wiki/Objekto...g#Terminologie
stotterer09 is offline  
Old 06/29/2014, 17:46   #10
 
elite*gold: 46
Join Date: Oct 2010
Posts: 782
Received Thanks: 525
Quote:
Originally Posted by ChilloutFuzi View Post
Eine Frage hätte ich noch gibts eine möglichkeit die aktivien Timer zu speichern und beim nächsten Startvorgang der Form wieder zu starten ?
Ich hab es jetzt mit einer For schleife und my.settings gemacht die settings lass ich mit count zählen aber es werden nicht alle timer geladen.
Code:
Option Strict Off

Imports System.IO
Imports System.Reflection

Public Class Form1
    Private ReadOnly _allComponents As List(Of Object) = New List(Of Object)()

    Private Sub btnAddTimer_Click(sender As Object, e As EventArgs) Handles btnAddTimer.Click
        Dim tmpTimer As New System.Windows.Forms.Timer()
        AddHandler tmpTimer.Tick, AddressOf Timer_Tick
        tmpTimer.Interval = 1337
        tmpTimer.Start()
        _allComponents.Add(tmpTimer)
    End Sub

    Private Iterator Function GetAllTimers() As IEnumerable(Of Timer)
        For Each currentComponent As Timer In _allComponents.OfType(Of Timer)()
            Yield currentComponent
        Next
    End Function

    Private Sub SaveState(ByVal timers As List(Of Timer), ByVal methodName As String)
        Dim stream As New StreamWriter(Path.Combine(Environment.CurrentDirectory, "timers.txt"), False) ' Überschreibt die alte datei. Wenn es true ist kackt LoadTimers ab.'
        stream.WriteLine(methodName)
        For Each currentTimer In timers
            stream.WriteLine(currentTimer.Interval)
            stream.WriteLine(currentTimer.Enabled)
            stream.Flush()
        Next
        stream.Close()
    End Sub

    Private Sub LoadTimers()
        Dim stream As New StreamReader(Path.Combine(Environment.CurrentDirectory, "timers.txt"))
        Dim methodName = stream.ReadLine()
        Dim method As MethodInfo
        Try
            method = Me.GetType().GetMethod(methodName)
        Catch
            Return
        End Try
        If method Is Nothing Then
            Return
        End If
        Dim interval As Int32 = 0
        Dim isTimerEnabled As Boolean = False
        While Not stream.EndOfStream()
            Dim currentElement = stream.ReadLine()
            If interval = 0 AndAlso Int32.TryParse(currentElement, interval) Then
                ' Da wir hier nur den ersten Teil auslesen den wir für den Timer brauchen, müssen wir hier nichst machen.'
            ElseIf Boolean.TryParse(currentElement, isTimerEnabled) Then
                ' Mach nen neuen timer, weil enabled das letzte element ist, was für den MOMENTANEN timer in die datei geschrieben wurde'
                Dim timer As New Timer()
                AddHandler timer.Tick, Function(sender, e)
                                           InvokeWrapper(method, Me, sender, e) 'ich habe ein paar andere Wege wie method.CreateDelegate probiert nur die wollten nicht wirklich.'
                                       End Function
                timer.Interval = interval
                timer.Start()
                timer.Enabled = isTimerEnabled
                _allComponents.Add(timer)
            End If
        End While
    End Sub

    Private Sub InvokeWrapper(method As MethodInfo, instance As Object, ParamArray arguments As Object())
        method.Invoke(instance, arguments)
    End Sub

    Private Sub ShowIntervalOfAllTimers()
        For Each currentTimer As Timer In _allComponents.OfType(Of Timer)()
            MessageBox.Show(currentTimer.Interval.ToString())
        Next
    End Sub

    Private Sub ShowTextOfAllTextBoxes()
        For Each currentTextBox As TextBox In _allComponents.OfType(Of TextBox)()
            MessageBox.Show(currentTextBox.Text)
        Next
    End Sub

    Public Sub Timer_Tick(ByVal sender As Object, ByVal e As EventArgs)

    End Sub

    Private Sub btnSaveTimers_Click(sender As Object, e As EventArgs) Handles btnSaveTimers.Click
        SaveState(GetAllTimers().ToList(), "Timer_Tick")
    End Sub

    Private Sub btnLoadTimers_Click(sender As Object, e As EventArgs) Handles btnLoadTimers.Click
        LoadTimers()
    End Sub
End Class
th0rex is offline  
Thanks
1 User
Old 06/29/2014, 18:29   #11
 
ChilloutFuzi's Avatar
 
elite*gold: 217
Join Date: Mar 2012
Posts: 413
Received Thanks: 53
Das muss doch aber einfacher gehen
ChilloutFuzi is offline  
Old 07/10/2014, 21:32   #12
 
elite*gold: 0
Join Date: Feb 2013
Posts: 62
Received Thanks: 5
Einfach nen Timer im Entwurf hinzufügen und dann einfach im Button Click Event Timer.Start?

Das ist wirklich der aller einfachste Weg
TheBeanjay is offline  
Old 07/11/2014, 15:39   #13
 
elite*gold: 46
Join Date: Oct 2010
Posts: 782
Received Thanks: 525
Er möchte eine zur compile zeit unbestimmte Anzahl an Timern erstellen können.
th0rex is offline  
Old 07/25/2014, 19:49   #14
 
elite*gold: 0
Join Date: Feb 2013
Posts: 62
Received Thanks: 5
Achso, dann musst du wohl den harten Weg gehen ^^
TheBeanjay is offline  
Reply

Tags
button, klick, timer, timer per buttonclick, vb2010


Similar Threads Similar Threads
[VB2010] UTF-8 Encoding
11/27/2013 - .NET Languages - 7 Replies
Hi zusammen. Ich habe eine Datenbankabfrage für eine MySql Datenbank erstellt. In den einzelnen Datensätzen sind Sonderzeichen enthalten wie beispielsweise "Ð" oder "я". Wie bekomme ich das hin, dass man auch nach solchen Zeichen via Abfrage suchen kann. Hier ein Codeschnipsel von dem, was ich bereits habe: Private Sub Suche_ID_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Suche_ID.Click sql = "SELECT * FROM Tabelle WHERE Spalte LIKE '%" &...
Vb2010
04/17/2013 - General Coding - 10 Replies
Habe jetzt mein Programm geschrieben(mit visual basic) , Tastendruck wird Simuliert ,jedoch nicht InGame . Es funktioniert , nurnicht im Spiel so wie ichs wollte :S Gibt es sowas wie ein Befehl das es direkt an die .exe gesendet wird? Hallo , ich hoffe doch das ich in der richtigen Sektion bin. Ich wollte aus Langeweile für ein Spiel sowas wie einen "AFK" Bot erstellen. Erstmal , ist es möglich mit VB2010? Oder sollte ich es mit C++ machen wobei es mir noch schwere fällt .
Job Timer (Taxi Timer, etc)
09/01/2011 - SRO Hacks, Bots, Cheats & Exploits - 2 Replies
A small utility to keep track of jobs that need timing. http://img834.imageshack.us/img834/6076/jt01.png Always read the changelog! To get access to Job Timer, register at "www.error- soft.net" ( without the spaces between the - ) Press thanks if this helps at all.
[VB2010-TUT] Login_System
05/31/2010 - Coding Tutorials - 12 Replies
Hallo elitepvpers, Heute mache ich mein erstes Tutorial und werde euch dabei zeigen, wie man ein Login System mit Visual Basic 2010 programmiert. Es ist wirklich sehr einfach ;) Fangen wir nun an: 1.) Ihr legt eine neue Form mit 2 Labels, 2 Textboxen und einem Button an. http://a.yfrog.com/img152/6648/form1anlegen1butto nerst.png



All times are GMT +1. The time now is 14:42.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.