2012-12-03 5 views
1

J'essaie d'apprendre à travailler avec Windows Form Applications dans VS et j'ai trouvé un problème. Je suis habitué à utiliser des applications basées sur la console. Donc le problème est:afficher dans la zone de texte

J'ai un formulaire et je veux afficher le résultat d'une fonction qui appartient à une autre classe dans une zone de texte, ce que je veux faire en appuyant sur un bouton. Par exemple ceci est une classe d'échantillon:

#ifndef PRUEBA_H 
#define PRUEBA_H 
#include <string> 
#include <iostream> 
#include <iomanip> 

using namespace std; 

class Prueba 
{ 
public: 
    void show() 
    { 
     cout<<"Thanks"<<endl; 
    } 
}; 

#endif 

ce qui est le code pour le bouton:

#include "prueba.h" 
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { 

     Prueba *x = new Prueba(); 
     textBox1->Text= System::Convert::ToString(x->show()); 
} 

Le compilateur me donne cette erreur

error C2665: 'System::Convert::ToString' : none of the 37 overloads could convert all the argument types  

Quelqu'un peut-il peut s'il vous plaît aider et affichez la bonne façon d'afficher une fonction à une zone de texte?

+0

Je ne suis pas sûr que ce soit toujours applicable, mais la dernière fois que j'ai écrit un C++/CLI app je devais utiliser 'gcnew' plutôt que' new' si je voulais l'objet à ramasser. Vous devrez faire 'Prueba^x = gcnew Prueba();'. – dreamlax

Répondre

0
void show() 
{ 
    cout<<"Thanks"<<endl; 
} 

Cette fonction imprime du texte en sortie standard, mais ne renvoie rien.

Vous devez le faire retourner une chaîne.

+1

Je suis allé string show() {string text = "merci"; retourner le texte;} et laissé le code dans le formulaire le même, ne fonctionne toujours pas. Merci – user1873836

0

Vous devez renvoyer une chaîne plutôt que d'imprimer simplement sur stdout. Quelque chose comme -

string show() 
{ 
    return "Thanks"; 
} 

également au lieu de

System::Convert::ToString(x->show()); 

Vous avez seulement besoin

x->show(); 
+1

J'ai fait exactement ce que vous avez posté string show() {return "Thanks";} et toujours la même erreur. C'est bizarre, dois-je inclure quelque chose? à côté du nom de la classe dans laquelle j'ai la fonction? Merci pour votre temps. – user1873836

+0

Réponse éditée pour faire plus de changements. Celui-ci devrait fonctionner. – jrl

+0

Non il se plaint d'erreur C2664: 'void Système :: Windows :: Formulaires :: Control :: Text :: set (System :: String ^)': impossible de convertir le paramètre 1 de 'std :: string' à 'System :: String^' – user1873836

0

Comme les autres ont dit, vous devez avoir un type de retour au lieu d'imprimer dans la console .

string show() 
{ 
    return "Thanks"; 
} 

Mais, vous souhaitez également supprimer la conversion.

textBox1->Text = (x->show()); 

Si cela ne fonctionne toujours pas, alors je vous suggère d'essayer une autre chaîne de la mise à la fonction, tels que:

string v = x->show(); 
textBox1->Text = v; 

Et voir où le compilateur va mal.

+0

toujours rien. J'ai essayé le gcnew au lieu de nouveau, en supprimant la conversion et en mettant une autre chaîne avec la fonction et rien, ça va mal dans textBox1-> Text = v; – user1873836

+0

Si vous définissez un point d'arrêt à 'textBox1-> Text = v;' et exécutez le code, qu'est-ce que 'v' est égal? Est-ce égal "Merci"? Aussi, obtenez-vous la même erreur? Ou est-ce simplement ne pas afficher? –

+0

il ne va pas n'importe où avec les points d'arrêt il casse et affiche la même erreur que j'ai essayé avec une autre fonction dans ma classe qui renvoie un int et il s'est montré très bien que j'ai fait Prueba * x = new Prueba(); int v = Système :: Convert :: ToInt32 (x-> ajouter (automne, été)); \t textBox1-> Text = Convert :: ToString (v); – user1873836

0

J'ai finalement obtenu la solution

#include <msclr\marshal.h> 
#include <msclr\marshal_cppstd.h> 

String^ s 
s = marshal_as<String^>(what you want to put in the textbox); 
textBox->Text += s + Environment::NewLine; 
Questions connexes