我正在使用VS2012 C ++制作Windows窗体应用程序。 例如情况,实际项目更复杂: 我有一个包含TextBox,Button和Timer的Form。 按钮只是触发计时器。 Timer只调用增加某些变量的函数。 我需要在TextBox中显示增加的函数变量。
在Form1.h中我添加代码:
public: void Timer_Function(); //function activated by timer Tick
void Set_Text(String ^str); //function to set TextBox Text
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
{
if (timer1->Enabled == false) timer1->Enabled = true;
else timer1->Enabled = false;
}
private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e)
{
Timer_Function();
}
在这样的My_app.cpp代码中:
#include "stdafx.h"
#include "Form1.h"
#include "resource.h"
using namespace test_staticfunc;
[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
Application::Run(gcnew Form1());
return 0;
}
void Form1::Timer_Function()
{
Timer_Func();
}
void Form1::Set_Text(String ^str)
{
textBox1->Text = str;
}
void Timer_Func()
{
static int I=0;
I++;
Form1::Set_Text(I.ToString());
}
函数Timer_Func()在“resource.h”中指定,如下所示:
void Timer_Func();
即。我试图通过将它传递给Form1公共方法Set_Text()来显示Timer_Func()的内部变量I的当前状态。 所以。这里的错误是Set_Text()不是静态方法。 我试图让它静态,但得到一个错误“С2227:左边的操作数” - &gt; Text“不是指向类,结构或联合的指针。”怎么做对吗?在这种情况下,静态方法试图实现非静态方法,对吗?
或者另一种方式:创建Form1的实例 - 而不是
Application::Run(gcnew Form1());
插入代码
Form1 ^My_form = gcnew Form1();
Application::Run(My_form);
并使用Set_Text作为类实例My_form的非静态方法。 但My_form仅在main()中可用!我无法在其他任何地方制作My_form。有没有办法让它成为全球性的东西?
可能还有其他方法可以解决这个问题吗?
请帮忙!我已经搜索了几个论坛的答案,但没有找到答案。更准确地说,它们不适合。 附:对不起,我的英语不好! ^ _ ^