PDA

View Full Version : [visual c++] come ottengo il testo da una textbox?


wisher
14-02-2006, 15:12
come da titolo, ho una textbox, come posso ottenere il testo che contiene alla pressione di un bottone per inserirlo in una variabile e elaborarlo?

wisher
14-02-2006, 15:31
come da titolo, ho una textbox, come posso ottenere il testo che contiene alla pressione di un bottone per inserirlo in una variabile e elaborarlo?
ho risolto

textBox->Text

nn capisco però perchè devo tipizzare a String^, cosa significa?
p.s.
perchè nn facciamo tutto a riga di comando? :read:

-fidel-
17-02-2006, 09:28
ho risolto

textBox->Text

nn capisco però perchè devo tipizzare a String^, cosa significa?
p.s.
perchè nn facciamo tutto a riga di comando? :read:

Stai usando MFC? In questo caso usi il metodo GetWindowText o GetLine (per leggere una singola linea di una textbox multiline). Se usi il classico message loop, usi invece il messaggio WM_GETTEXT... Non capisco il fatto di tipizzare a String.

kk3z
17-02-2006, 09:46
Non è visual c++ a quanto sembra :wtf:

-fidel-
17-02-2006, 09:59
Non è visual c++ a quanto sembra :wtf:

mi sa che hai ragione...

wisher
17-02-2006, 10:35
Non è visual c++ a quanto sembra :wtf:
è visual c++ express 2005, usando la funzione textbox->Text riesco ad ottenere il testo, però nn come una stringa o cm array di char ma come String^

-fidel-
17-02-2006, 11:40
è visual c++ express 2005, usando la funzione textbox->Text riesco ad ottenere il testo, però nn come una stringa o cm array di char ma come String^

Ma stai usando C++ .NET??

wisher
17-02-2006, 16:46
ho fatto nuovo progetto e da li ho scelto windows form application, poi mi sono basato sulla guida in linea di visual c++

-fidel-
18-02-2006, 09:23
ho fatto nuovo progetto e da li ho scelto windows form application, poi mi sono basato sulla guida in linea di visual c++

Allora sta usando C++ .NET ;) Usare C++ con il framework .NET è leggermente più complicato (rispetto ad esempio al C#) in quanto si tratta di un'"estensione" al framework, e non nasce per il framework. In più stai anche usando Windows Form (giustamente, se hai scelto di usare il framework...): noterai infatti un riferimento al namespace 'System.Windows.Forms' all'inizio del tuo programma.
Comunque, è perfettamente normale che con C++ .NET venga ritornato una String^ (handle alla classe managed String): tale classe managed è molto diversa dalla classica std::string del C++ (#include <string>). In particolare la proprietà Text della classe TextBox di Windows Form ritorna una handle (^) con il C++ (a differenza del C# dove viene tornato solo String) perchè, anche in ambiente managed, il C++ lavora con i puntatori (gestiti però dal garbage collector di .NET). Non a caso ad esempio accedi alla proprietà Text della classe TextBox con 'Textbox1->Text' e non con 'Textbox1.Text': la textbox (se spulci il codice) dovrebbe essere allocata esplicitamente con la keyword "gcnew" ("TextBox^ textBox1 = gcnew TextBox;" ad esempio - nota il demarcatore di handle ^).

EDIT: Ovviamente quando usi classi managed, tutti i tipi ritornati dai metodi di tali classi sono anch'essi managed, quindi la proprietà Text della classe managed TextBox di Windows Form non può mai ritornare un semplice tipo string del C++ o un array di char, ma ritorna un tipo managed (in questo caso una handle a String).

wisher
18-02-2006, 10:47
Allora sta usando C++ .NET ;) Usare C++ con il framework .NET è leggermente più complicato (rispetto ad esempio al C#) in quanto si tratta di un'"estensione" al framework, e non nasce per il framework. In più stai anche usando Windows Form (giustamente, se hai scelto di usare il framework...): noterai infatti un riferimento al namespace 'System.Windows.Forms' all'inizio del tuo programma.
Comunque, è perfettamente normale che con C++ .NET venga ritornato una String^ (handle alla classe managed String): tale classe managed è molto diversa dalla classica std::string del C++ (#include <string>). In particolare la proprietà Text della classe TextBox di Windows Form ritorna una handle (^) con il C++ (a differenza del C# dove viene tornato solo String) perchè, anche in ambiente managed, il C++ lavora con i puntatori (gestiti però dal garbage collector di .NET). Non a caso ad esempio accedi alla proprietà Text della classe TextBox con 'Textbox1->Text' e non con 'Textbox1.Text': la textbox (se spulci il codice) dovrebbe essere allocata esplicitamente con la keyword "gcnew" ("TextBox^ textBox1 = gcnew TextBox;" ad esempio - nota il demarcatore di handle ^).

EDIT: Ovviamente quando usi classi managed, tutti i tipi ritornati dai metodi di tali classi sono anch'essi managed, quindi la proprietà Text della classe managed TextBox di Windows Form non può mai ritornare un semplice tipo string del C++ o un array di char, ma ritorna un tipo managed (in questo caso una handle a String).
grazie, se volessi fare un progetto nn .NET che tipo dovrei selezionare?

-fidel-
18-02-2006, 11:26
grazie, se volessi fare un progetto nn .NET che tipo dovrei selezionare?

Hai 2 possibilità:

1) creare un'applicazione C++ standard
2) creare un'applicazione C++ MFC

Un'applicazione C++ standard è quella che fa uso del classico message loop di Windows, è molto potente ma molto "tradizionale", devi padroneggiare il meccanismo del message loop di Windows per programmare, e non è proprio intuitivo. Questo tipo di applicazione la crei con il wizard selezionando tra i progetti C++ "Win32->Win32 Project" (o Win32 Console Project se vuoi il template di un programma a riga di comando).

Un'applicazione C++ MFC è un'applicazione Windows che usa le librerie MFC (Microsoft Foundation Classes) che ti permettono una programmazione "object oriented" soprattutto nella gestione delle finestre e degli eventi, molto più moderna e semplice da gestire: ti permette di programmare per Win32 quasi come con .NET (tranne per il garbage collection ovviamente). Ti consiglio questo approccio se sei alle prime armi con la programmazione C++ per Windows.
Questo tipo di applicazione la crei con il wizard selezionando Tra i progetti C++ "MFC->MFC Application". Per cominciare ti consiglio inoltre, nella creazione del progetto, di andare sulla linguetta delle opzioni e selezionare il tipo "dialog mode" di progetto, invece che il modello "document/view". Quest'ultimo modello è un po' più complicato di quello basato su finestre di dialogo (a cui penso sarai più abituato) e prima di usarlo (il modello document/view) ti consiglio una buona lettura della Msdn, o di un libro sulla programmazione C++ per Windows ;)

Ciao :)