2016-12-01 133 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); 
    } 

我推薦的第一選擇,因爲這樣你可以具體你要修改的控制。如果你只想要按鈕,第二個選項將會非常棘手。