I'm using C++ in VS2005 and have an 8x8 grid of buttons on a form. I want to have these buttons in an array, so when I click on any of them it will open the same event handler (I think that is what they are called), but I will know the index of which one was clicked on. I know how to do this in VB and C#, but I can't seem to figure it out with C++ Right now开发者_如何转开发 I have all my buttons labelled by their location, i.e. b00, b10, b21, etc. So I think what I am looking for is a way to do something like this:
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;
...
}
and then in form1.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
}
Any help would be appreciated. Also let me know if I am going in the complete wrong direction with this. Thanks!
Use a cli::array
to store an array of a CLI type. For example, to create an 8x8 two-dimensional array like in your question, you can use:
cli::array<Button^, 2>^ b = gcnew cli::array<Button^, 2>(8, 8);
See MSDN for more information about cli::array
.
You don't need an array for this. Wire all the buttons up to the same event handler function, then parse the coordinates from the sender's name.
精彩评论