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.
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
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 ?
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
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.
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.
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
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
[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