2016-12-01 139 views
-1

我正在用C++在visual studio窗体上制作tic tac toe游戏。 如何将此C#代码转换为C++代码?如何将此C#foreach代码转换为C++?

private Void disableButtons() 
{ 
    try 
    { 
     foreach (Control c in Controls) 
     { 
     Button b = (Button)c; 
     b.Enabled = false; 
     } 
    } 
    catch{ } 
} 
+1

你使用的是什么框架? MFC? –

+1

在如何转换foreach或如何实际使按钮在C++中工作?一个是微不足道的,一个不是。 –

+0

我想为C++转换foreach循环 –

回答

1

你不能把它转换成纯C++代码,而无需使用具有类控制按钮与具有“已启用”公共成员Button类的任何额外的库。 但是,您可以将其转换为C++/CLI代码,您可以在其中混用纯粹的C++代码。

private Void disableButtons() 
{ 
    try 
    { 
     for each (Control^ c in Controls) 
     { 
      Button^ b = (Button^)c; 
      b->Enabled = false; 
     } 
    } 
    catch{ } 
} 
0

下面是关于如何使用C#的foreach在C++中的例子:

#include <iostream> 

int main() 
{ 
    const int SIZE = 3; 
    int myArray[SIZE] = { 1, 2, 3 }; 
    for (int & i : myArray) // make sure to put the & 
    { 
     i = i + 10; 
    } 

    for (int i = 0; i < SIZE; i++) 
    { 
     std::cout << myArray[i] << std::endl; 
    } 

    return 0; 
} 

的语法应该是这样的:

for(type name : collection) { // your code here } 

,你可以把&类型之间和名称如果你想改变原来的元素

for(type & name : collection) { // your code here }

0

你已经标记了这个Visual C++,所以我假设你正在使用MFC。如果你使用Qt或wxWidgets或其他的东西,答案会不一样。

如果你已经有了控件的ID在一个容器,要为-旺火上,则:

UINT Controls[] = { IDC_BUTTON1, IDC_BUTTON2, IDC_BUTTON3, IDC_BUTTON4, IDC_BUTTON5 }; 

for (UINT c : Controls) 
{ 
    CWnd *b = GetDlgItem(c); 
    if (b) 
     b->EnableWindow(FALSE); 
} 

然而,如果你不具备这种控件的容器,但不知何故想还是迭代然后所有的控件:

CWnd *c = GetWindow(GW_CHILD); 
while (c) 
    { 
    c->EnableWindow(FALSE); 
    c = c->GetNextWindow(GW_HWNDNEXT); 
    } 

我推荐的第一选择,因为这样你可以具体你要修改的控制。如果你只想要按钮,第二个选项将会非常棘手。