2010-04-25 3 views
2

저는 VS2005에서 C++을 사용하고 있고 폼에 8x8 격자의 단추가 있습니다. 나는이 배열을 배열에 넣고 싶습니다. 그래서 그 중 하나를 클릭하면 동일한 이벤트 핸들러가 열립니다. (나는 그것이 호출 된 것이라고 생각합니다.) 그러나 어느 것이 클릭되었는지에 대한 인덱스를 알 수 있습니다. VB 및 C#에서이 작업을 수행하는 방법을 알고 있지만 C++을 사용하여이 작업을 처리 할 수 ​​없습니다. 지금 당장 모든 위치에 b00, b10, b21 등의 레이블이 붙은 모든 단추가 있습니다. form1.h에서 다음C++에서 버튼 배열을 만드는 방법

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; 
... 
} 

과 : 어떤 도움을 주시면 감사하겠습니다

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 
} 

을 찾고있는 것은 이런 일을 할 수있는 방법이다. 또한 내가 완전히 잘못된 방향으로 가고 있는지 알려주십시오. 감사!

답변

3

cli::array을 사용하여 CLI 유형의 어레이를 저장하십시오. 예를 들어, 귀하의 질문처럼 8 × 8 2 차원 배열을 만들려면 사용할 수 있습니다

cli::array<Button^, 2>^ b = gcnew cli::array<Button^, 2>(8, 8); 

See MSDN for more information about cli::array.

+1

응답 해 주셔서 감사합니다. 나는이 오류 (오류 C3145 : 'b': 전역 변수 또는 정적 변수가 cli :: array ^'유형을 관리하지 못했을 수 있기 때문에)를 전역으로 만들 수 있다고 생각하지 않습니다. Main()에서 선언하면 잘 동작하지만 처리기가 그것에 액세스 할 수 없기 때문에 사용할 수 있다고 생각하지 않거나 여전히 작동하도록하는 방법이 있습니까? (전 Visual C++에서 완전한 멍청한 놈입니다. 이전에는 결코 사용하지 않았습니다.) – user324667

+2

힌트 : C++을 전혀 사용하지 않습니다. 그것은 C++/CLI와 비슷하지만 C++과 많은 유사점이 있지만 다른 언어입니다. 어쨌든 관리 대상 개체는 전역 적이 될 수 없습니다. 왜냐하면 ... 음, 단지 의미가 없습니다. 모든 객체가 클래스의 일부가되어야하기 때문에 모든 .NET 언어에서이를 수행 할 수 없습니다. 어쨌든 어쨌든 객체에 액세스하지 않아도됩니다. 그 너머로 : 왜 C++/CLI를 사용하고 있습니까? C#은 .NET 물건을 작성하는 데 훨씬 깔끔하기 때문에 관리되지 않는 라이브러리 (P/Invoke가 부담이 될 정도로)와 자주 상호 작용하지 않는 한 C#을 사용할 수도 있습니다. –

+1

네, C#을 사용하는 것이 훨씬 쉽다고 생각합니다. 내가 C 언어로 해보려하는 이유는 언어에서 더 잘할 수 있기 때문입니다.하지만 저는 커맨드 라인 인터페이스 만 가지고있는 무언가를 시도해야합니다. – user324667

1

이에 대한 배열을 필요가 없습니다. 모든 버튼을 동일한 이벤트 핸들러 함수에 연결 한 다음 보낸 사람의 이름에서 좌표를 파싱합니다.

+0

글쎄, 좋은 해결책이지만, 배열/행렬로 작업하는 것이 더 쉬울 것입니다 ... – kokbira

관련 문제