Newsgroup: it.comp.lang.visual-basic
Titolo: ancora sulle stringhe & cmbbox

Ho delle stringhe da inserire in una listBox, ora il problema è questo come
faccio ad incolonnare i dati contenuti nelle stringhe esempio:
Descizione1,Descrizione2 String * 50
Quantità1="1"
Quantità2="2"
Descrizione1="Ciao"
Descrizione2="Ciaoo"
stringa1=Quantità1+Descrizione1+"abc"
stringa2=Qunatità2+Descrizione2+"abc"
In questo caso ottengo:
1Ciao                                 abc
2Ciaoo                                 abc
ovvero tutto spostato a destra, il problema deriva dal fatto che lo spazio
non occupa lo stesso numero di pixel,twip,cm o che dir si voglia di un
carattere.
Il problema è di facile risoluzione? Non so dove andare a parare, ne ho
provate un po' di diverse ma non ho trovato la soluzione.
conversione di una stringa in long.
In un txtBox devo inserire un valore che deve essere solo numerico e non
stringa, nel dataformat ho inserito valuta..., però non riesco a fare in
modo che non vengano accettate stringhe contenenti lettere e
simboli.Ovviamente non funzione la conversione con la Clng ed arriva
l'errore in esecuzione, cosa faccio devo disabilitare tutti i tasti tranne i
numeri e il tastierino quando blocnum è attivo ho c'è un modo +
veloce?Ricerca di valori non numerici in una stringa?Ci dovrebbe essere una
funzione che mi dice se il testo contiene solo numeri vero?
altra domanda, ho una cmbbox di tipo dropdown, è giusto che ci sia tra le
varie scelte la stringa vuota si può togliere?
THANX
--
____/*\____/*\____/*\____/*\____/*\____
HaPpY
E-Mail: hap...@REMOVEsupereva.it
Home page: 
http://happy77.supereva.it/index.html
____/*\____/*\____/*\____/*\____/*\____

Risposta punto 2:    usa la MaskEdBox.
leggiti la propieta' mask nell' help. ti dice come impostare i soli
caratteri che devono essere accettati.
Risposta punto 3:
ma la punteggiatura dove la hai lasciata ? Non si capisce niente
--
Icq ---> 50759119
Mercenaries Never Die. They Just Go Hell To Regroup.

Il problema tre è stato risolto, grazie a chiunque mi abbia risposto.
Ma il problema + grosso è il primo...
--
____/*\____/*\____/*\____/*\____/*\____
HaPpY
E-Mail: hap...@REMOVEsupereva.it
Home page: 
http://happy77.supereva.it/index.html
____/*\____/*\____/*\____/*\____/*\____
HaPpY <hap...@REMOVEsupereva.it> wrote in message
89k38d$6dg$1...@lacerta.tiscalinet.it...


 > funzione che mi dice se il testo contiene solo numeri vero?
L'esposizione del problema rivela che non hai chiarito con te stesso se vuoi
gestire l'immissione dell'utente o meno. Mi spiego: quando parli di
"disabilitare tasti" siamo nell'ambito della gestione dell'immissione;
quando parli di "convertire" l'immissione e' gia' avvenuta e siamo nella
fase della sua validazione. Direi che potresti disinteressarti di cosa
l'utente immette nella TextBox perche' e' una soluzione piu' semplice in
quanto richiede la scrittura di un minor numero di righe di codice, e
conseguentemente meno debug e test, e proccuparti solo della validazione.
Per far questo devi stabilire "un istante" in cui l'utente "ha finito" e il
tuo programma prende il controllo della situazione validando i dati,
convertendoli, quindi passandoli al database. C'e' bisogno di un "evento"
per far questo ma da cio' che dici non traspare quando finisce l'immissione
dell'utente e inizia la registrazione dei dati: viene premuto un pulsante?
un tasto? si sposta il fuoco da un controllo? Poniamo che tu abbia un
CommandButton di nome Command1 e Caption="Salva"; potresti impostare il
codice piu' o meno cosi' (e' solo una modesta proposta):
Option Explicit
Private Sub Command1_Click( _
)
  Call Salva
End Sub
Private Sub Salva( _
)
  If DatiValidi Then
    ' Codice per il salvataggio dei dati.
    ' ...
  End If
End Sub
Private Function DatiValidi( _
) As Boolean
On Local Error Resume Next
Dim v_Temp  As Variant
Dim s_Msg   As String
  Let DatiValidi = True
  If DatiValidi Then
    With Text1
      ' Poniamo che in Text1 tu voglia un Long...
      Let v_Temp = CLng(.Text)
      Select Case Err.Number
      Case 0
      Case 6
        Let s_Msg _
          = "Dati fuori range in " _
          & "'" & .Name & "'."
      Case 13
        Let s_Msg _
          = "Dati non numerici in " _
          & "'" & .Name & "'."
      Case Else
        Let s_Msg _
          = "I dati in " _
          & "'" & .Name & "'" _
          & " hanno causato l'errore:" & vbLf _
          & "'" & Err.Description & "'."
      End Select
    End With
    Let DatiValidi = (Len(s_Msg) = 0)
  End If
  If DatiValidi Then
    With Text2
      ' Poniamo che in Text2 tu voglia un Integer...
      Let v_Temp = CInt(.Text)
      Select Case Err.Number
      Case 0
      Case 6
        Let s_Msg _
          = "Dati fuori range in " _
          & "'" & .Name & "'."
      Case 13
        Let s_Msg _
          = "Dati non numerici in " _
          & "'" & .Name & "'."
      Case Else
        Let s_Msg _
          = "I dati in " _
          & "'" & .Name & "'" _
          & " hanno causato l'errore:" & vbLf _
          & "'" & Err.Description & "'."
      End Select
    End With
    Let DatiValidi = (Len(s_Msg) = 0)
  End If
  ' E cosi' via per tutte le verifiche necessarie...
  ' ...
  ' ... e, alla fine:
  If Not DatiValidi Then _
    Call MsgBox( _
        s_Msg _
      , vbCritical + vbOKOnly)
End Function
[PROBLEMA 3]
[...]
--
Ciao.
Maurizio

 sono impegnato molto, in verita').
1. se puoi usare un font nonprop, in clipper, per visualizzare/stampare robe
simili, facevo molto se ricordo qualcosa tipo:
larghezza(col1)= desc1 + spac(n - len(desc1))
se nel tuo listbox hai un numero ragionevole di voci, puoi provare.
2. seno' c'e' almeno vbnet, e prob altro, e i tabstops:
C:\tp_prg\_vb\mvps-new\
www.mvps.org
\vbnet\code\listapi\listboxtabs.htm
Visual Basic List API Routines
Posted Wednesday January 8, 1997
Updated Thursday October 07, 1999
Setting Tabstops in a ListBox Using SendMessage Related Topics
VBnet Frames
Applies to: VB4-32, VB5, VB6
With appropriate 16-bit API declarations, this code also applies to:  VB3
VB4-16
Also see related topics:
Setting Tabstops in a Textbox Using SendMessage
VBnet Utility: VBnet CoolTabs
Prerequisites
List items separated by a tab character.
----------------------------------------------------------------------------
----
 Interestingly, this was my first foray into the Windows API .. about 15
minutes after starting to develop in VB2 I discovered that the only way to
column-align items in a listbox was to use a fixed-width font.  But since
this was not how other Windows apps looked, a call to Microsoft Support
resulted in a fax with the VB code to set the tabs in both a list and
textbox. I was hooked on APIs, and never looked back!
BAS Module Code
Add the following code to a BAS module:
----------------------------------------------------------------------------
----
Public Declare Function SendMessageArray Lib _
   "user32" Alias "SendMessageA" _
   (ByVal hwnd As Long, _
    ByVal wMsg As Long, _
    ByVal wParam As Long, _
    lParam As Any) As Long
Public Const LB_SETTABSTOPS = &H192
'--end block--'
Form Code
Add the following code to the form:
----------------------------------------------------------------------------
----
Sub Form_Load()
  'set up the tabstops in the listboxes
   ReDim tabstop(1 To 3) As Long
  'assign some values to the tabs for the second third and fourth
  'column (the first is flush against the listbox edge)
   tabstop(1) = 90
   tabstop(2) = 130
   tabstop(3) = 185
  'set the tabs
   Call SendMessageArray(List1.hwnd, LB_SETTABSTOPS, 3, tabstop(1))
   List1.Refresh
End Sub
'--end block--'
Comments
Once a set of tabstops are set, they remain even after a List1.Clear has
been issued.
The values assigned to the tabstop array may appear somewhat arbitrary. In
fact, they are based on a control's measurement system - 'dialog units' -
and I have yet to find a suitable algorithm for computing the width of a
given font into dialog units that can be successfully used to remove the
need for trial and error determination of the values to set.
The wParam and lParam members of the SendMessage call as used above mean:
   wParam: 3 - the total number of tabstops to set .. equal to
UBound(tabstops)
   lParam: tabstop(1) - the array of tabstops with the index representing
the first tabstop to use
To populate the listbox, use the tab character between strings when adding
items ...
   List1.AddItem item1 & vbTab & item2 & vbTab & item3 & vbTab & item4
Note: vbTab is a VB4-defined constant; users of previous versions should use
instead either chr$(9), or define your own variable for the tab character,
i.e. tb$ = chr$(9). Remember too that the word ' Tab ' is a reserved keyword
in Visual Basic.
For an explanation of my usage of the API as SendMessageArray, see Using the
Windows SendMessage API Successfully in the Resource Centre.


per abitudine, preferisco l'ultima. le immissioni (es. tipico, le date,
dovrebbero essere validate al lostfocus, e inchiodate (luppate ?) li'
finche' l'utente non immetta qc di sensato o prema cancel.
se c'e' un cmd per validare / convertire il formato (data, numero, ecc.),
l'utente *non* lo premera'.
ciao, a.

 wrote in message
89r3de$l15$3...@nslave2.tin.it...


 wrote in message 89rg4q$ah4$1...@nslave1.tin.it...


[PROBLEMA 2]
    è vero che puoi lavorare a immissione ultimata, puoi fare un semplice
controllo sulla posizione corrente del cursore (anke se no funziona sempre
ad hoc!) o meglio sulla keydown e verificare ke il codice del tasto sia una
cifra o un punto....

cifra o un punto....
ovviamente puoi poi sempre usare il data_format  della maschera...

 da inserire ma n dovra essere perlomeno definito come?
scusa del ritardo, avevo perso la tua domanda.
tieni presente che la faccenda la usavo in clipper per incolonnare dei
listati a video.
poni che il contenuto della prima colonna sia un campo alfa di 25, puoi
stabilire che la prima colonna e' p.e. 30, cosi' ha anche un effetto
decente. in questo caso avrai con le voci di 25 car. 5 spazi, con quelle di
24 6 spazi, ecc.
lo stesso sistema lo puoi usare per le colonne successive. presupposti
fondamentali:
0. se una colonna puo' essere larga 255, la vedo grigia. (il metodo mi e'
tornato in mente x' parlavi di 50 caratteri, che ancora sono gestibili).
1. devi usare un carattere tipo il courier *non* proporzionale, in cui lo
spazio, la m e la i occupano la stessa larghezza (appunto com'era un monitor
dos).
2. nel listbox ci vanno 50, 100, 200 voci (fai qualche prova magari), *non*
20k, seno' i calcoli d'impaginazione prendono un tantinello...
cmq prova anche il metodo dei tab di vbnet.
ciao, a.