.net 如何在C++;

.net 如何在C++;,.net,c++-cli,control-array,.net,C++ Cli,Control Array,我在VS2005使用C++,在窗体上有一个8x8的按钮网格。我希望将这些按钮放在一个数组中,因此当我单击其中任何一个按钮时,它将打开同一个事件处理程序(我想这就是它们的名称),但我将知道单击哪个按钮的索引。我知道如何在VB和C语言中这样做,但是我似乎不能用C++来解决。 现在,我所有的按钮都按其位置进行了标记,即b00、b10、b21等。因此,我想我正在寻找一种方法来完成以下操作: Button b[8][8]; //this causes me errors (error C2728: 'Sy

我在VS2005使用C++,在窗体上有一个8x8的按钮网格。我希望将这些按钮放在一个数组中,因此当我单击其中任何一个按钮时,它将打开同一个事件处理程序(我想这就是它们的名称),但我将知道单击哪个按钮的索引。我知道如何在VB和C语言中这样做,但是我似乎不能用C++来解决。 现在,我所有的按钮都按其位置进行了标记,即b00、b10、b21等。因此,我想我正在寻找一种方法来完成以下操作:

Button b[8][8]; //this causes me errors (error C2728: 'System::Windows::Forms::Button' : a native array cannot contain this managed type) and (error C2227: left of '->{ctor}' must point to class/struct/union/generic type)   

void Assignment(){
b[0][0] = b00;
b[1][0] = b10;
...
}
然后在表1.h中:

private: System::Void b_Click(System::Object^  sender, System::EventArgs^  e) {
//somehow read the coordinates into variables x and y
//do something based on these values
}

任何帮助都将不胜感激。也让我知道,如果我在这个完全错误的方向。谢谢

使用
cli::array
存储cli类型的数组。例如,要创建问题中所述的8x8二维阵列,可以使用:

cli::array<Button^, 2>^ b = gcnew cli::array<Button^, 2>(8, 8);
cli::array^b=gcnew cli::array(8,8);

此操作不需要阵列。将所有按钮连接到同一个事件处理程序函数,然后从发送者的名字解析坐标。

感谢您的回复!但我不认为它会让我全局创建它,因为我遇到了这个错误(错误C3145:“b”:全局或静态变量可能没有托管类型“cli::array^”),如果我在Main()中声明它,它工作得很好,但我认为我无法使用它,因为处理程序将无法访问它,还是有办法让它继续工作?(我是Visual C++ + BTW的完整NoB,以前从未使用过)提示:你根本就不使用C++。它是C++ + CLI,尽管C++有很多相似之处,但它是不同的语言。在任何情况下,托管对象都不能是全局的,因为……好吧,这根本没有任何意义。在任何.NET语言中都不能这样做,因为每个对象都必须是类的一部分。在任何情况下,您可能都不必访问该对象。除此之外:为什么要使用C++/CLI?C#在处理.NET内容方面要干净得多,因此,除非您经常与某个非托管库进行交互(足以使P/Invoke变得繁重),否则您最好使用C#。是的,我认为C#会容易得多。我试图在C++中做的原因是因为我正在努力提高语言的水平,但是我想我应该尝试一下只有一个命令行界面的东西来避免我正在运行的许多问题。into@mangoman13如果你想学习C++,我强烈建议不要用C++和CLI来干扰。C++/CLI混淆了C++编程的许多方面,而GOTCHAS列表非常长。如果你想学习C++,还有其他的GUI工具包,你可以使用。嗯,这是一个很好的解决方案,但是使用数组/矩阵会更容易…