Benutzer mit den meisten Antworten
Code verkürzen

Frage
-
Erste mal ein schones guten Morgen an alle
als klein Anfänger, habe ich folgende Probleme, ich möchte eine Relaikarte mit 16 Relais steuern. und zwar so: es wird 2 Timer benötig (pro Relais) eine zum blinken, der 2. bestimmt die Zeit. ich habe dieser Aufgabe so gelöst mit VB 2010:
' ****** * * * * * * * * * * * * Relais 1
' Checkbutton
Private Sub chk1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chk1.CheckedChanged
TimerBlink.Interval = InterwalUp1.Value * 100 ' Interval Timer1 laden in Hundertens
Timer1Schalten.Interval = ZeitUp1.Value * 10000 ' Interval Timer2 laden in sekunden
Timer1Schalten.Enabled = True ' Timer2 einschalten
TimerBlink.Enabled = True ' Timer1 einschalten
If chk1.Checked = False Then ' scheck1 überprüfen für Relaiauswahl
TimerBlink.Enabled = False ' wenn aus Timer 1 aus
cbSetRelay1.Checked = False ' Check-Button ausschalten (cbSetRelay1 ist ein andere chek zum einschalten)
End If
End Sub
' Timer Blinker
Private Sub TimerBlink_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TimerBlink.Tick
cbSetRelay1.Checked = Not cbSetRelay1.Checked ' checkButton ein aus - schalten
End Sub
' Timer Blinkzeit
Private Sub Timer1Schalten_Tick_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1Schalten.Tick
TimerBlink.Enabled = False ' Blinker aus
If cbSetRelay1.Checked = True Then ' Wenn Check noch vorhanden,
cbSetRelay1.Checked = False ' ausschalten
End If
End Sub
es ist ein Menge code für 16 Stücke.
Hat jemande eine idee wie ich ewt. alles kleiner machen kann ?
Danke für die Antworten
grüss Claude 44
Antworten
-
Hi Claude44,
Erstell dir doch ein Klasse Relai welches deine Logic und Propertys enthält und auch die Entsprächenden Events.
Dann kannst du dir einfach 16 Objekte erzeugen und brauchst den Code nicht doppelt zu schreiben.
Fals du noch eine "Anzeige" dazu Brauchst kannst du dir ein Benutzer Controll erzeugen, welches auf den Objektenarbeiter und deiner Form dan 16 Controlls hinzufügen.
Das Erzeugen der Objekte kann man dann auch in einer Schleife machen.
MFG
Björn
- Als Antwort markiert Robert BreitenhoferModerator Freitag, 16. Dezember 2011 16:45
-
Hi Claude44,
hier mal wie es die Klasse aussehen könnet.
In deiner From kanst du dann eine Checkbox per Databinding an die Checkt Property binden.
Imports System.ComponentModel Public Class Relai Implements INotifyPropertyChanged Private WithEvents mTimerBlinker As System.Windows.Forms.Timer = New System.Windows.Forms.Timer Private WithEvents mTimerSchalter As System.Windows.Forms.Timer = New System.Windows.Forms.Timer Private mCheckt As Boolean = False Public Property Checked() As Boolean Get Return mCheckt End Get Set(ByVal value As Boolean) mCheckt = value NotifyPropertyChanged("Checked") End Set End Property Private mInterwalUp As Integer = 0 Public Property InterwalUp() As Integer Get Return mInterwalUp End Get Set(ByVal value As Integer) mInterwalUp = value NotifyPropertyChanged("InterwalUP") End Set End Property Private mZeitUP As Integer = 0 Public Property ZeitUP() As Integer Get Return mZeitUP End Get Set(ByVal value As Integer) mZeitUP = value NotifyPropertyChanged("ZeitUP") End Set End Property Public Event PropertyChanged(ByVal sender As Object, ByVal e As System.ComponentModel.PropertyChangedEventArgs) Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged Private Sub NotifyPropertyChanged(ByVal info As String) RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(info)) End Sub Public Sub Start() mTimerBlinker.Interval = mInterwalUp * 100 mTimerSchalter.Interval = mZeitUP * 10000 mTimerSchalter.Enabled = True mTimerBlinker.Enabled = True mTimerBlinker.Enabled = False ' Checked = False ' End Sub Private Sub TimerBlink_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mTimerBlinker.Tick Checked = Not Checked ' checkButton ein aus - schalten End Sub ' Timer Blinkzeit Private Sub Timer1Schalten_Tick_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mTimerSchalter.Tick mTimerBlinker.Enabled = False ' Blinker aus If Checked = True Then ' Wenn Check noch vorhanden, Checked = False ' ausschalten End If End Sub
MFG
Björn
- Als Antwort markiert Robert BreitenhoferModerator Freitag, 16. Dezember 2011 16:45
Alle Antworten
-
Hi Claude44,
Erstell dir doch ein Klasse Relai welches deine Logic und Propertys enthält und auch die Entsprächenden Events.
Dann kannst du dir einfach 16 Objekte erzeugen und brauchst den Code nicht doppelt zu schreiben.
Fals du noch eine "Anzeige" dazu Brauchst kannst du dir ein Benutzer Controll erzeugen, welches auf den Objektenarbeiter und deiner Form dan 16 Controlls hinzufügen.
Das Erzeugen der Objekte kann man dann auch in einer Schleife machen.
MFG
Björn
- Als Antwort markiert Robert BreitenhoferModerator Freitag, 16. Dezember 2011 16:45
-
Hi Björn
Danke für dein Antworte,
leider bin ich noch nicht so weit und werde natürlich daran arbeiten, Ich muss erstmal mir ein Classe erstellen, und noch verstehen was ich mach. Dann kann ich mir beschäftigen mit die Anzeig wenn nötig .
Vielleicht hast du ein Idee wie dieser Classe aussehen kann ?
Claude44
Ich habe vergessen zu erwähnen dass jeder Timer unabhängig sind, also es sind 32 Timer.- Bearbeitet Claude44 Dienstag, 29. November 2011 15:16
-
Hi Claude44,
hier mal wie es die Klasse aussehen könnet.
In deiner From kanst du dann eine Checkbox per Databinding an die Checkt Property binden.
Imports System.ComponentModel Public Class Relai Implements INotifyPropertyChanged Private WithEvents mTimerBlinker As System.Windows.Forms.Timer = New System.Windows.Forms.Timer Private WithEvents mTimerSchalter As System.Windows.Forms.Timer = New System.Windows.Forms.Timer Private mCheckt As Boolean = False Public Property Checked() As Boolean Get Return mCheckt End Get Set(ByVal value As Boolean) mCheckt = value NotifyPropertyChanged("Checked") End Set End Property Private mInterwalUp As Integer = 0 Public Property InterwalUp() As Integer Get Return mInterwalUp End Get Set(ByVal value As Integer) mInterwalUp = value NotifyPropertyChanged("InterwalUP") End Set End Property Private mZeitUP As Integer = 0 Public Property ZeitUP() As Integer Get Return mZeitUP End Get Set(ByVal value As Integer) mZeitUP = value NotifyPropertyChanged("ZeitUP") End Set End Property Public Event PropertyChanged(ByVal sender As Object, ByVal e As System.ComponentModel.PropertyChangedEventArgs) Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged Private Sub NotifyPropertyChanged(ByVal info As String) RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(info)) End Sub Public Sub Start() mTimerBlinker.Interval = mInterwalUp * 100 mTimerSchalter.Interval = mZeitUP * 10000 mTimerSchalter.Enabled = True mTimerBlinker.Enabled = True mTimerBlinker.Enabled = False ' Checked = False ' End Sub Private Sub TimerBlink_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mTimerBlinker.Tick Checked = Not Checked ' checkButton ein aus - schalten End Sub ' Timer Blinkzeit Private Sub Timer1Schalten_Tick_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mTimerSchalter.Tick mTimerBlinker.Enabled = False ' Blinker aus If Checked = True Then ' Wenn Check noch vorhanden, Checked = False ' ausschalten End If End Sub
MFG
Björn
- Als Antwort markiert Robert BreitenhoferModerator Freitag, 16. Dezember 2011 16:45
-
Hallo Claude44,
Ich gehe davon aus, dass die Antworten Dir weitergeholfen haben.
Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.Grüße,
RobertRobert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.