PDA

View Full Version : [Visual C++]Estrarre e splittare Text from textbox


Caio81
08-06-2006, 18:40
Ciao a tutti,
sto cercando di estrarre il testo scritto in una textbox della mia applicazione grafica, sviluppo il tutto con VS2003, e il programma è scritto in VC++.
Il problema è che semplicemente istanziando una stringa e cercando di assegnargli il valore del campo di testo, in questo modo:

string dati=textBoxInviaScrittura->Text->ToString();

ottengo questo errore:

error C2440: "inizializzazione": impossibile convertire da "System::String __gc *" a "std::basic_string<_Elem,_Traits,_Ax>"

e fin qui ok, la mia stringa della classe std (che ho incluso nel file) non può contenere la stringa System::String __gc *.

Ovviamente dichiarando la stringa in questo modo:

System::String *dati=textBoxInviaScrittura->Text->ToString();

il tutto funziona.

Quindi vorrei capire, il metodo tostring() della textbox mi ritorna un puntatore ad una stringa della classe System?
Qualcuno mi sa spiegare che differenza c'è tra i due tipi di stringa?

Da qui poi io vorrei splittare la stringa a blocchi di 2, e metterla in un array di char.

Se però provo a farlo, in questo modo:

char sottostr[]=dati->Substring(0,2)->ToCharArray();

non funziona con questo errore:

error C2440: "inizializzazione": impossibile convertire da "__wchar_t __gc[]" a "char []"

Ho l'impressione di stare mischiando un po i tipi standard del C++ e quelli di Visual C++, ma sono alle prime armi con questo linguaggio per cui avrei bisogno di un po di chiarezza.

Qualcuno mi sa aiutare? :)

okay
08-06-2006, 21:01
Ciao a tutti,
sto cercando di estrarre il testo scritto in una textbox della mia applicazione grafica, sviluppo il tutto con VS2003, e il programma è scritto in VC++.
Il problema è che semplicemente istanziando una stringa e cercando di assegnargli il valore del campo di testo, in questo modo:

string dati=textBoxInviaScrittura->Text->ToString();

ottengo questo errore:

error C2440: "inizializzazione": impossibile convertire da "System::String __gc *" a "std::basic_string<_Elem,_Traits,_Ax>"

e fin qui ok, la mia stringa della classe std (che ho incluso nel file) non può contenere la stringa System::String __gc *.

Ovviamente dichiarando la stringa in questo modo:

System::String *dati=textBoxInviaScrittura->Text->ToString();

il tutto funziona.

Quindi vorrei capire, il metodo tostring() della textbox mi ritorna un puntatore ad una stringa della classe System?
Qualcuno mi sa spiegare che differenza c'è tra i due tipi di stringa?

Da qui poi io vorrei splittare la stringa a blocchi di 2, e metterla in un array di char.

Se però provo a farlo, in questo modo:

char sottostr[]=dati->Substring(0,2)->ToCharArray();

non funziona con questo errore:

error C2440: "inizializzazione": impossibile convertire da "__wchar_t __gc[]" a "char []"

Ho l'impressione di stare mischiando un po i tipi standard del C++ e quelli di Visual C++, ma sono alle prime armi con questo linguaggio per cui avrei bisogno di un po di chiarezza.

Qualcuno mi sa aiutare? :)


dai un'occhiata per le trasformazioni da unicode ad ansi e viceversa.

poi per i char mai assegnare con = ma usare strcpy(,) tra char.

per le conversioni devi prima tramutare da TCHAR a char e poi copiare la char nella char con strcpy()

cionci
09-06-2006, 11:11
Stai usando .Net quindi usa i tipi di .Net...

Caio81
10-06-2006, 08:40
Innanzittuto grazie per le risposte! :)


poi per i char mai assegnare con = ma usare strcpy(,) tra char.

Si si certo, a meno di non stare copiando un unico carattere di un array di char in un altro (non va perchè si aspetta un const char *).


per le conversioni devi prima tramutare da TCHAR a char e poi copiare la char nella char con strcpy()
ok, infatti ho risolto convertendo in un char semplice

wctomb(char_semplice,w_char[i]);

Stai usando .Net quindi usa i tipi di .Net...
In effetti sarebbe la cosa migliore, avrei anche più metodi a disposizione su tali oggetti...ma poi i tipi .NET sono quelli derivati del namespace System dico bene?
Quindi la stringa che ho usato per estrarre il testo dalla textbox è un tipo .NET (e infatti se metto std::string mi da errore in compilazione).
Il fatto è che poi devo utilizzare una libreria in C inclusa nel progetto, i cui metodi prendono e restituiscono puntatori ad array di Char, e quindi sono costretto a fare le conversioni nei tipi standard...