Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    119

    [VBNET] Alleggerimento codice

    Dal momento che nel programma ho creato una paginetta con delle combo dove imposto i comandi associo ai bottoni o agli assi del joystick.
    Per i bottoni non ho problemi perchè nelle combo ho il valore del bottone di cui leggere lo stato.
    Ma per gli assi no quindi mi ritrovo il polling del Joystick pieno di select case così:

    codice:
       Private Sub joystickPolling()
            If ComCamera.IsOpen = True Then
                Try
                    joy1.Poll()
                    Dim state As JoystickState = joy1.CurrentJoystickState
    
                    'Assegnazione PAN
                    Select Case cboSelectPan.SelectedItem.ToString
                        Case "X"
                            CurrXval = state.X
                        Case "Rx"
                            CurrXval = state.Rx
                        Case "Vx"
                            CurrXval = state.VX
                        Case "Ax"
                            CurrXval = state.AX
                        Case "ARx"
                            CurrXval = state.ARx
                        Case "VRx"
                            CurrXval = state.VRx
                        Case "Y"
                            CurrXval = state.Y
                        Case "Ry"
                            CurrXval = state.Ry
                        Case "Vy"
                            CurrXval = state.VY
                        Case "Ay"
                            CurrXval = state.AY
                        Case "ARy"
                            CurrXval = state.ARy
                        Case "VRy"
                            CurrXval = state.VRy
                        Case "Z"
                            CurrXval = state.Z
                        Case "Rz"
                            CurrXval = state.Rz
                        Case "Vz"
                            CurrXval = state.VZ
                        Case "Az"
                            CurrXval = state.AZ
                        Case "ARz"
                            CurrXval = state.ARz
                        Case "VRz"
                            CurrXval = state.VRz
                    End Select
    
                    'Assegnazione SLOWPT
                    Select Case cboSlowPT.SelectedItem.ToString
                        Case "X"
                            CurrSlowPT = state.X
                        Case "Rx"
                            CurrSlowPT = state.Rx
                        Case "Vx"
                            CurrSlowPT = state.VX
                        Case "Ax"
                            CurrSlowPT = state.AX
                        Case "ARx"
                            CurrSlowPT = state.ARx
                        Case "VRx"
                            CurrSlowPT = state.VRx
                        Case "Y"
                            CurrSlowPT = state.Y
                        Case "Ry"
                            CurrSlowPT = state.Ry
                        Case "Vy"
                            CurrSlowPT = state.VY
                        Case "Ay"
                            CurrSlowPT = state.AY
                        Case "ARy"
                            CurrSlowPT = state.ARy
                        Case "VRy"
                            CurrSlowPT = state.VRy
                        Case "Z"
                            CurrSlowPT = state.Z
                        Case "Rz"
                            CurrSlowPT = state.Rz
                        Case "Vz"
                            CurrSlowPT = state.VZ
                        Case "Az"
                            CurrSlowPT = state.AZ
                        Case "ARz"
                            CurrSlowPT = state.ARz
                        Case "VRz"
                            CurrSlowPT = state.VRz
                    End Select
    
                    'Assegnazione TILT
                    Select Case cboSelectTilt.SelectedItem.ToString
                        Case "X"
                            CurrYval = state.X
                        Case "Rx"
                            CurrYval = state.Rx
                        Case "Vx"
                            CurrYval = state.VX
                        Case "Ax"
                            CurrYval = state.AX
                        Case "ARx"
                            CurrYval = state.ARx
                        Case "VRx"
                            CurrYval = state.VRx
                        Case "Y"
                            CurrYval = state.Y
                        Case "Ry"
                            CurrYval = state.Ry
                        Case "Vy"
                            CurrYval = state.VY
                        Case "Ay"
                            CurrYval = state.AY
                        Case "ARy"
                            CurrYval = state.ARy
                        Case "VRy"
                            CurrYval = state.VRy
    
    ......
    ......
    End sub
    Esiste un modo per abbreviare questo codice ?

    Grazie, Alberto

  2. #2
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    Ciao,
    bisognerebbe capire il tuo concetto di "abreviare"

    anzitutto nella combo potresti bindare direttamente i valori creandoti un source, quindi ti eviteresti il select case e andresti a impostare direttamente il valore selezionato, oltretutto magari è già così (magari è un enum), ma con un tostring lo trasformi in stringa...
    poi senza sapere il tipo di stato.? è un pò difficile, potresti anche ricorrere alla reflection.

    comunque da solo quel codice non basta per poterti dare un consiglio.


  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    119
    Per alleggerire intenderei avere nel polling del Joy:

    codice:
     Private Sub joystickPolling()
            If ComCamera.IsOpen = True Then
                Try
                    joy1.Poll()
                    Dim state As JoystickState = joy1.CurrentJoystickState
    
                    'Assegnazione PAN
                    currXval = cboSelectPan.SelectedItem
                    'Assegnazione TILT
                    currYval = cboSelectTilt.SelectedItem
                    'Assegnazione ZOOM
                    currYval = cboSelectZoom.SelectedItem
                    ........
     End sub
    In modo che ho già la variabile che ottiene lo stato del joy
    CurrXval = state.X è una proprietà del joy

    Quindi sarebbe possibile aggiungere alla combo delle proprietà ?

    Spero di essermi fatto capire.

    Grazie, Alberto

  4. #4
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    ciao, carichi il datasource del/dei combo con i nomi delle proprietà del tipo JoystickState
    codice:
    comboBox1.DataSource = GetType(JoystickState).GetProperties().[Select](Function(s) s.Name).ToList()
    quando selezioni un valore dal combo tramite reflection recuperi il nome della proprietà e il suo valore da joy1.CurrentJoystickState (dovrebbe essere un intero)
    codice:
    CurrXval = CInt(GetType(JoystickState).GetProperty(comboBox1.SelectedItem.ToString()).GetValue(joy1.CurrentJoystickState, Nothing))

  5. #5
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    anzi a dire il vero lo puoi fare ancora più semplice :
    codice:
    comboBox1.DataSource = GetType(JoystickState).GetProperties()
    comboBox1.DisplayMember = "Name"
    e lo recuperi con
    codice:
    CurrXval = DirectCast(comboBox1.SelectedItem, PropertyInfo).GetValue(joy1.CurrentJoystickState, Nothing)

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    119
    Ok proverò ma già da adesso so che funzionerà !!

    Grazie, Alberto

  7. #7
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    Figurati.


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.