0

我没有简单的方法来解释这一点,但我有 100 个按钮,用这里的代码行写成一个按钮数组:

static array <Button^, 2>^ button = gcnew array <Button^, 2> (10,10);

并且每个都按照这个套装进行初始化:

button[4,0] = button40;

我还为所有这些按钮提供了一个事件处理程序。我需要知道什么是我可以确定单击了哪个按钮的方法,例如,如果您单击第三行和第四列中的按钮,它应该知道名为 button23 的按钮(保存在数组中为 button[2, 3]) 已被按下。

还有一件事,这是 C++/CLI,我知道这段代码有多么奇怪。

4

1 回答 1

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);
}
于 2013-05-08T20:43:20.303 回答