Altre istruzioni

From Apache OpenOffice Wiki
Jump to: navigation, search

Type...End Type

Uno struct è una raccolta di campi di dati, gestibili come elemento unico. Nella terminologia precedente, lo struct corrisponde a un record o a parte di un record.

L'API utilizza spesso struct predefiniti, ma questi sono struct UNO, un tipo di struct altamente specializzato.

Definizione

Mediante le istruzioni Type...End Type, potete definire struct (non UNO) personalizzati:

Type aMenuItem			'assign the name of the type
    'Define the data fields within the struct. Each
    ' definition looks like a Dim statement, without the "Dim".
    aCommand as String		
    aText as String
End Type			'close the definition

Istanza

La definizione Type è soltanto un modello, e non un set di vere variabili. Per creare un'istanza del tipo, costituita di variabili reali, leggibili e memorizzabili, utilizzate l'istruzione Dim as New:

Dim maItem as New aMenuItem

Ambito

Come mostrato nell'esempio seguente, la definizione Type può essere inserita all'inizio di un modulo (prima della prima istruzione Sub o Function). La definizione sarà quindi disponibile per tutte le routine del modulo.

A partire da OpenOffice.org 3.0, e a differenza di quanto accade per le variabili, non è possibile consentire l'accesso alla definizione al di fuori del modulo.

Un'istanza del nuovo tipo è una variabile, e segue le regole consuete per il campo di applicazione delle variabili (vedere Campo di applicazione e vita utile delle variabili).

Un esempio della modalità di utilizzo della definizione e del riferimento ai campi all'interno di un'istanza è disponibile nella sezione relativa a With...End With.

With...End With

Qualificatori

In generale, Basic non verifica un contenitore, quale Object, per rilevare i nomi eventualmente definiti nel contenitore stesso. Per utilizzare questo tipo di nome, è necessario indirizzare la ricerca in Basic. Per fare ciò il nome dell'oggetto va utilizzato come qualificatore. Scrivere il nome prima del nome interno, separandolo con un punto:

MyObject.SomeName

Dato che i contenitori possono a loro volta includere altri contenitori, potrebbero essere necessari più qualificatori. Scrivere i qualificatori in ordine, dal più esterno al più interno:

OuterObject.InnerObject.FarInsideObject.SomeName

Questi nomi possono essere descritti anche come concatenati mediante l'operatore punto ('.').

Soluzione alternativa con With

Le istruzioni di delimitazione With...End With offrono un'alternativa alla scrittura ripetuta di tutti i qualificatori, alcuni dei quali possono risultare particolarmente lunghi. Potete specificare i qualificatori nell'istruzione With. Fino a quando Basic non trova l'istruzione End With, ricerca nomi parzialmente qualificati, ovvero nomi che iniziano con il punto (operatore unario punto). Il compilatore utilizza i qualificatori dell'istruzione With come se fossero scritti prima del nome parzialmente qualificato.

Esempio 1: struct definito dall'utente

Questo esempio mostra come definire e utilizzare uno struct, e come creare riferimenti agli elementi in esso contenuti, utilizzando o meno With.

Type aMenuItem
    aCommand as String
    aText as String
End Type
 
Sub Main
    'Create an instance of the user-defined struct.
    ' Note the keyword, "New".
    Dim maItem as New aMenuItem
    With maItem
        .aCommand = ".uno:Copy"
        .aText = "~Copy"
    End With
 
    MsgBox     "Command: " & maItem.aCommand & Chr(13) _
            & "Text: " & maItem.aText
End Sub

Esempio 2: istruzione Case

In Celle e intervalli, dall'esempio seguente sono stati esclusi completamente i qualificatori nelle istruzioni Case, per maggior chiarezza. Il codice può essere scritto in modo più semplice come segue:

Dim Doc As Object
Dim Sheet As Object
Dim Cell As Object
 
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
Cell = Sheet.getCellByPosition(1,1)	'Cell "B2" (0-based!)
 
Cell.Value = 1000
 
With com.sun.star.table.CellContentType
  Select Case Cell.Type
    Case .EMPTY 
      MsgBox "Content: Empty"
    Case .VALUE
      MsgBox "Content: Value"
    Case .TEXT
      MsgBox "Content: Text"
    Case .FORMULA
     MsgBox "Content: Formula"
  End Select
End With

Osservare che il costrutto With deve essere interamente esterno rispetto al costrutto Select.


Content on this page is licensed under the Public Documentation License (PDL).
Personal tools