我没有简单的方法来解释这个,但我有100个按钮,写在一个按钮数组中,这里有代码行:
static array <Button^, 2>^ button = gcnew array <Button^, 2> (10,10);
每个人都是在这件诉讼之后初始化的:
button[4,0] = button40;
我还为所有这些按钮都有一个事件处理程序。我需要知道的是我可以确定单击哪个按钮的方法,例如,如果单击第三行和第四列中的按钮,它应该知道名为button23的按钮(保存在数组中作为按钮[2, 3])已被按下。
另外一件事,这是C ++ / CLI,我知道这段代码有多奇怪。
答案 0 :(得分:1)
在您的事件处理程序中,您拥有事件的sender
:
void button_Click(Object^ sender, EventArgs^ e)
{
// This is the name of the button
String^ buttonName = safe_cast<Button^>(sender)->Name;
}
如果需要项目索引(行和列),则需要循环遍历数组,因为Array::IndexOf
不支持多维数组。让我们(在某处)写一个像这样的通用函数:
static void Somewhere::IndexOf(Array^ matrix, Object^ element, int% row, int% column)
{
row = column = -1;
for (int i=matrix->GetLowerBound(0); i <= matrix->GetUpperBound(0); ++i)
{
for (int i=matrix->GetLowerBound(1); i <= matrix->GetUpperBound(1); ++i)
{
// Note reference comparison, this won't work with boxed value types
if (Object::ReferenceEquals(matrix->GetValue(i, j), element)
{
row = i;
column = j;
return;
}
}
}
}
所以最后你可能有这个:
void button_Click(Object^ sender, EventArgs^ e)
{
// This is the name of the button
String^ buttonName = safe_cast<Button^>(sender)->Name;
// This is the "location" of the button
int row = 0, column = 0;
Somewhere::IndexOf(button, sender, row, column);
}