2012-12-03 141 views
1

我想了解如何在VS中使用Windows窗體應用程序,並且發現有問題。我習慣於基於控制檯的應用程序。所以問題是:在文本框中顯示

我有一個窗體,我想顯示一個函數的結果,屬於另一個類在文本框中,這是我想按下按鈕時做的。例如,這是一個示例類:

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

using namespace std; 

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

#endif 

,這是該按鈕的代碼:

#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()); 
} 

編譯器給我這個錯誤

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

任何人都可以請幫助併發布正確的方式來顯示功能的文本框?

+0

我不知道這仍然是適用的,但我最後一次寫了一個C++/CLI應用程序,我不得不使用'gcnew'而不僅僅是'new'如果我想垃圾收集對象。你將不得不做'Prueba^x = gcnew Prueba();'。 – dreamlax

回答

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

該函數將一些文本打印到標準輸出,但不返回任何內容。

你需要讓它返回一個字符串。

+1

我去了字符串show(){string text =「thanks」;返回文本;}並留下形式相同的代碼,仍然無法正常工作。謝謝 – user1873836

0

您需要返回一個字符串,而不是僅打印到stdout。喜歡的東西 -

string show() 
{ 
    return "Thanks"; 
} 

代替

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

而且你可能只需要

x->show(); 
+1

我做了你正在發佈的字符串show(){return「Thanks」;}仍然是同樣的錯誤。這很奇怪,我需要包括什麼嗎?除了我有功能的課程名稱?謝謝你的時間。 – user1873836

+0

編輯答案進行更多更改。這一個應該工作。 – jrl

+0

不要抱怨錯誤C2664:'void System :: Windows :: Forms :: Control :: Text :: set(System :: String ^)':不能將參數1從'std :: string'轉換爲'System ::字符串^' – user1873836

0

像別人說的,你需要有一個返回類型,而不是打印到控制檯。

string show() 
{ 
    return "Thanks"; 
} 

但是,你也想刪除轉換。

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

如果仍然無法正常工作,那麼我建議你嘗試設置另一個字符串的使用功能,如:

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

,看看編譯器是怎麼了。

+0

仍然沒有。我嘗試了gcnew而不是new,除去了convert和設置另一個字符串的功能,沒有任何東西,在textBox1-> Text = v中出錯了。 – user1873836

+0

如果在'textBox1-> Text = v;'處設置斷點並運行代碼,那麼'v'等於什麼?它是否等於「謝謝」?另外,你是否得到相同的錯誤?或者它只是不顯示? –

+0

它沒有得到它斷裂的斷點,並顯示相同的錯誤我試着用我的類中的另一個函數返回一個int,它顯示得很好,我做了Prueba * x = new Prueba(); int v = System :: Convert :: ToInt32(x-> add(fall,summer)); \t textBox1-> Text = Convert :: ToString(v); – user1873836

0

我終於得到了解決

#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;