none
Code verkürzen RRS feed

  • 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

    Dienstag, 29. November 2011 11:56

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

     

    Dienstag, 29. November 2011 14:31
  • 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

    Mittwoch, 30. November 2011 08:57

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

     

    Dienstag, 29. November 2011 14:31
  • 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
    Dienstag, 29. November 2011 14:57
  • 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

    Mittwoch, 30. November 2011 08:57
  •  

    Hi Björn

    Vielen vielen Dank für dein Arbeit, ich beschäft mich etwas damit in off etwas machen zu können

    ich schliss noch nicht dieser Tred, ich melde mich noch mal

     

    und noch mal Danke 

    Claude44

     

    Mittwoch, 30. November 2011 17:37
  • 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,
    Robert


    Robert Breitenhofer, MICROSOFT  Twitter Facebook
    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.

    Freitag, 16. Dezember 2011 16:45
    Moderator