View Full Version : [visual c++] come ottengo il testo da una textbox?
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?
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:
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.
Non è visual c++ a quanto sembra :wtf:
Non è visual c++ a quanto sembra :wtf:
mi sa che hai ragione...
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^
è 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??
ho fatto nuovo progetto e da li ho scelto windows form application, poi mi sono basato sulla guida in linea di visual c++
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).
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?
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 :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.