La creazione di un progetto da zero in Visual Basic NET? Lo trovi su Opentraining.it Visual Basic Italia
Guide e Tutorials:indexed
Creare un Add-In (Ottava parte)

Nel corso dell'ultimo articolo della serie eravamo arrivati a dichiarare le variabili incluse nel modulo di codice di Form1, dopo aver dato loro un significato concreto.
Vediamo adesso di risolvere alcuni problemi generati dall'utente, per poi evitare errori fastidiosi al momento dell'esecuzione.
Un errore prima della chiusura dell'aggiunta infatti bloccano l'applicazione (a meno che non sia specificata in modo esplicito la volontà di proseguire anche in caso di malfunzionamento) ancora prima dell'evento OnDisconnection.
Questo non sarebbe una cosa particolarmente grave se all'interno di tale evento non avessimo incluso le due linee di codice che ci permettono di eliminare la voce 'Ridimensiona' dal menu 'Strumenti' e l'icona "Bollicine.bmp" dalla toolbar di Visual Basic.
Un errore porterebbe dunque a non poter togliere questi elementi in modo automatico allo scaricamento dell'aggiunta.
L'eventuale problema generato dall'utente può nascere se si lascia vuota le caselle di testo Text1 e Text2 che rispettivamente rappresentano la percentuale dell'altezza e della lunghezza dei controlli presenti sulla form da utilizzare al momento dell'operazione di ridimensionamento.
Per ovviare al problema, possiamo pensare ad esempio di lasciare la dimensione dei controlli così com'è, utilizzando una percentuale del 100% sull'attuale dimensione sia in altezza che in larghezza.
Utilizziamo la funzione IsNumeric che ci indicherà non solo se nella casella di testo sono stati immessi caratteri non numerici ma anche se non è proprio stato introdotto nulla.
Sempre nella sottoprocedura Command1_Click che avevamo lasciato in sospeso la volta precedente aggiungiamo queste poche linee di codice:

If Not IsNumeric(Text1.Text) Then
Text1.Text = "100"
End If
If Not IsNumeric(Text2.Text) Then
Text2.Text = "100"
End If

La funzione IsNumeric è trattata in dettaglio in un'articolo della rubrica 'Lo sapevi che...?'.
Adesso che le preferenze dell'utente in fatto di dimensioni sono accettabili in ogni senso, possiamo dare un significato ed un valore ad alcune delle variabili che erano state dichiarate nell'articolo precedente.
In particolare facciamo assumere alla variabile booleana RidimensionaTutto il valore del controllo Option2.
Si ricorderà infatti che i due valori (o stati) possibili per gli OptionButtons sono True, nel caso in cui siano selezionati e False nel caso opposto.
Si può quindi evitare di dire "...se l'Option2 è vero allora RidimensionaTutto è vero, altrimenti è falso..." assegnando direttamente a RidimensionaTutto il valore di Option2, in questo modo:

RidimensionaTutto = Option2.Value

Adesso assegnamo alle variabili PercentualeX e PercentualeY i rispettivi valori rappresentati dal rapporto tra la percentuale della dimensione (in altezza e lunghezza) dei controlli indicata dall'utente ed il valore 100:

PercentualeY = Text1.Text / 100
PercentualeX = Text2.Text / 100

Ora andiamo verso un passaggio un po' più ostico. Dobbiamo considerare infatti il caso in cui l'utente abbia selezionato (e quindi voglia ridimensionare) una form.
Si deve in tal caso aver l'accortezza di impostare un riferimento alla form scelta tra le tante che possono far parte di un singolo progetto, assegnando tale riferimento alla variabile oggetto che abbiamo chiamato VbF e dichiarato come oggetto form di Visual Basic.
Possiamo risolvere la questione in questo modo:

If VBI.SelectedVBComponent.Type = vbext_ct_VBForm Then
Set VbF = VBInstance.SelectedVBComponent.Designer

Non chiudiamo l'operazione con un End If perchè dobbiamo adesso cercare tutti i controlli che sono sulla form.
Eseguiamo quindi un vero e proprio loop che ci porta a controllare tutti gli oggetti eventualmente presenti:

For Each VbC In VbF.VBControls

Si ricorderà che VbC è la variabile oggetto definita come controllo di Visual Basic.
Quindi, per ogni controllo su VbF ossia su Form1, nel caso in cui il controllo sia stato selezionato dall'utente per l'operazione di ridimensionamento oppure nel caso in cui l'utente abbia selezionato tutti i controlli:

If VbC.InSelection = True Or RidimensionaTutto = True Then

tutti i controlli ridimensionabili dovranno assumere le nuove proporzioni. E per quelli non ridimensionabili? La cosa diventa non così automatica come per gli altri.
Sarà necessaria una valutazione più dettagliata che vedremo nel corso del prossimo articolo. Prima di terminare però riassumiamo il codice completo relativo a Form1, fino a questo momento:

Private Sub Command2_Click()
Unload Form1
End Sub
Private Sub Command1_Click()
Dim PercentualeX, PercentualeY As Single
On Error Resume Next
Dim VbF As VBForm
Dim VbC As VBControl
Dim RidimensionaTutto As Boolean
Dim VBI As VBIDE.VBE
Set VBI = AddInClass.VBI
If Not IsNumeric(Text1.Text) Then
Text1.Text = "100"
End If
If Not IsNumeric(Text2.Text) Then
Text2.Text = "100"
End If
RidimensionaTutto = Option2.Value
PercentualeY = Text1.Text / 100
PercentualeX = Text2.Text / 100
If VBI.SelectedVBComponent.Type = vbext_ct_VBForm Then
Set VbF = VBInstance.SelectedVBComponent.Designer
For Each VbC In VbF.VBControls
If VbC.InSelection = True Or RidimensionaTutto = True Then
...
End Sub



Archivio:ndexed
Lezioni Commenta questa lezione Invia la tua guida Avviso per le nuove lezioni
Proponi un argomento

Visual Basic Italia© copyright 2000 - tutti i diritti riservati
E-mail:
vbitalia@libero.it