2010-07-23 4 views
3

VB6에서는 컨트롤에 인덱스를 지정할 수 있습니다.VB6 인덱싱 된 컨트롤에 해당하는 WindowsForms

즉 : cmdStartInterval (1), cmdStartInterval (2), ....

Private Sub cmdStartInterval_Click(Index As Integer) 
... 
End Sub 

이가 C#에서 similary 방법으로도 가능 :

그런 다음이 같은 방법 머리가?

+0

나는 winforms를 사용하고 있다고 생각합니다. 확인 할수 있어요? – Oded

+0

예, 질문을 업데이트했습니다. – Rookian

+0

VB6은 .NET에서 WinForms와 동등한 것으로 항상 번역됩니다. asp.net에는 사용할 수 없습니다. ASP에서 VBScript가 될 것입니다. – Abel

답변

3

는 C#에서 당신은

protected void cmdButtons_Click(object sender, System.EventArgs e) 

처리 한 이벤트에 모든 버튼을 할당 할 수 있습니다. 위에서 문제 인덱스 자체가 필요하지 않은 경우에는 우수한 대안의 서브셋에 대한 유효한 응답이 있지만

참고
(후 첨가), 그것과 동등한 되는 것은 아니다 제목이 나타내는대로 개의 인덱싱 된 컨트롤이 있지만 대체입니다. VB6의 인덱싱 된 컨트롤은 기술적으로 배열입니다. 따라서 동등한 배열은 C#에서 코드를 통해서만 접근 할 수 있고 디자이너를 통해서는 접근 할 수 없습니다.

+0

이것은 좋은 소리지만, 나는 이것을 시도 할 것입니다. =) – Rookian

+0

기본적으로 VB6에서도 마찬가지입니다. 색인을 생성 한 모든 버튼에는 자동으로 하나의 이벤트 핸들이 있습니다. – Abel

+0

나는이 스레드의 후기 방문객들에게 편의의 우수함을 명확히하기 위해 약간의 메모를 추가했지만이 대답의 한계점도 추가했습니다. 희망을 품을 수 있습니다. (언제든지 다시 되돌릴 수 있습니다.) – Abel

2

동일한 기능은 컨트롤 배열을 사용하는 것입니다. 이벤트에 수동으로 인덱스를 추가해야합니다. 인덱스가 필요하지 않은 경우 이벤트에 컨트롤을 할당하면됩니다.

단점은 C#과 VB.NET 모두입니다. 디자이너와 함께 인덱싱 된 컨트롤을 만들 수 없으므로 수동으로 만들어야합니다.

위쪽은 다음과 같습니다. 이로 인해 더 많은 자유가 주어집니다.

편집 :
이 그 모습입니다 :

// in your Form_Init: 

Button [] buttons = new Button[10]; // create the array of button controls 

for(int i = 0; i < buttons.Length; i++) 
{ 

    buttons[i].Click += new EventHandler(btn_Click); 
    buttons[i].Tag = i;    // Tag is an object, not a string as it was in VB6 

    // a step often forgotten: add them to the form 
    this.Controls.Add(buttons[i]); // don't forget to give it a location and visibility 
} 

// the event: 
void btn_Click(object sender, EventArgs e) 
{ 
    // do your thing here, use the Tag as index: 
    int index = (int) ((Button)sender).Tag; 
    throw new NotImplementedException(); 
} 

PS를 : 양식 디자이너를 사용하는 경우, 각 버튼은 자신의 이름을 갖게됩니다. 다른 사용자가 제안한 것처럼 (즉, VB6에서도 할 수있는 것처럼) 동일한 핸들러를 사용하는 경우, 이전처럼 컨트롤을 인덱스로 쉽게 구별 할 수 없습니다. 이를 극복하려면 태그 필드를 사용하십시오. 이 경우 Name 필드를 사용하는 것이 일반적으로 이 아니라이 좋으므로 원치 않는 종속성이 생성됩니다. 버튼이 이벤트가 호출 보낸 매개 변수에 의해이 이벤트에 전달이 버튼의 예를 한 클릭하면

+0

나는 당신이 편집 한 대답을 읽었으며, 당신이 옳다고 생각합니다. 내가 그것을 표시 한 원인은 올바른 대답이었습니다. 코드 뒤에있는 코드를 코딩하는 대신 유용한 IDE를 사용할 수 있습니다. 여전히 IDE + "Array-Approach"를 사용하는 방법이 있습니까? – Rookian

+0

@Rookian : 아니오, 직접적으로 아닙니다. Microsoft의 제안은 디자이너를 사용하고 버튼에 적절한 이름을 지정하는 것입니다.'form_init'에서 초기화하는 하나의 컨테이너 (배열과 같은 콜렉션 컴포넌트)를 생성하면 코드를 작성하면 자동으로 컨트롤을 찾습니다. 어떤 접근 방식을 사용하든간에 객체를 동일한 이름으로 제공하는 것은 더 이상 가능하지 않으므로 관계없이 더 많은 작업이 수행됩니다 (이상하게 보일 수 있습니다. 여기에 [Microsoft의 제안, 코드 추가] (http://msdn.microsoft.com/en-us/library/aa289500%28VS.71%29.aspx)가 있습니다. – Abel

+0

내가 사용한 접근법은 한 이벤트에서 이벤트를 위임하고 ControlName_ProviderName 명명 규칙을 사용하는 일반 컨트롤 찾기 클래스를 작성하는 것입니다. 나는 Textbox, Comboboxes 등등 같은 의미를 가진 버튼 컨트롤 만 가지고 있지 않다. – Rookian

관련 문제