2014-05-16 15 views
0

동적으로로드 된 컨트롤 (정확한 버튼)을 필요로하는 응용 프로그램을 만들고 있습니다. 이 버튼들은 완전히 동일하므로 문제는 프로그램 방식으로 컨트롤을 만드는 것이 아니라 어떻게 든 작동하게 만드는 것입니다. 각 버튼은 양식을 열어야하며 양식은 버튼의 일부 데이터를 기반으로합니다. 모든 버튼에 하나의 이벤트 처리기를 사용하고 이에 포함 된 양식을 양식에 포함시키고 싶습니다. 그렇게 할 방법이 있습니까? 나는이 형식의 유형을 아직 모릅니다. 따라서 사전 정의 된 "선택 사례"또는 가능성을 제한하는 것을 사용할 수 없습니다.데이터베이스에서 컨트롤 가져 오기

또 다른 문제점은 양식 (모듈)을 독립적으로 "설치"하고 싶습니다. 가능한 방법이 있습니까? 나는 그것이 DLL을 사용하여 완료 될 수 있다고 생각하지만 확실하지 않습니다. 거기에 어떤 정보가 있습니까, 나는 잠시 동안 그것을 찾고 있었지만 아무 것도 발견하지 못했습니다.

+0

click 이벤트 (Heinzi의 답변 참조)에서 어떤 양식을 적용할지 결정하려면 단추 이름 (Button1보다는 의미있는 이름 사용)을 평가하십시오. .Tag 속성을 사용하여 추가 정보를 저장할 수도 있습니다.click 이벤트의 발신자 인수는 이런 종류의 일입니다. 'thisName = CType (발신인, 버튼) .Name' – Plutonix

+0

문제 해결을 위해 우리에게 요청하지 마십시오. 문제를 직접 해결하려고 시도한 후 왜 결과가 정확한지를 보여주고 작동하지 않는 이유를 설명해주십시오. 당신이 꼭 알아야 할 훌륭한 기사는 "[당신은 무엇을 했습니까?] (http://whathaveyoutried.com/)"를보십시오. –

답변

1

첫 번째 문제 : 코드에 단추를 만들 수 있습니다. 다음과 같은 질문에 대한 답변은 시작하기에 충분해야한다 (그것의 C#을 수 있지만 기본 원칙은 동일합니다) : 간단히 말해서

:

  • 읽기 당신의 버튼 구성 데이터를 데이터베이스 (또는 구성 파일 또는 기타)에서
  • 사용자 인터페이스 (위 참조)에 버튼을 추가,
  • AddHandler을 사용하여 각 단추에 이벤트 처리기를 추가하십시오.

    AddHandler myButton.Click, Sub(sender, e) 
               ' Do something 
              End Sub 
    

(두 번째 질문에 대해서는 : 예를 들어. 1. 그것은 당신이 같은 SO 질문에이 개 질문을 안 당신이 물어 2. 나에게 불분명 내가 제안 해당위한 새로운 SO 질문을 열고 더 명확하게 귀하의 요구 사항을 설명하려고)

0

어쩌면 내가 당신의 대답을 이해하지 ...하지만 당신의 버튼에 :.

1) 사용자 지정 컨트롤을 만들고, Button 컨트롤을 상속하고, 소품을 추가한다. 폼 작성에 사용되는 erties. 당신의 핸들러가 참조하는 서브에서 첫 번째 인수는 컨트롤이 양식을 만드는 데 자신의 속성을 사용할 수 있도록 이벤트를 발생 (버튼) ... Heinzi의에 추가

+0

그는 왜 사용자 지정 컨트롤을 만들어야합니까? 'Dim b as New Button'은 완벽하게 작동합니다. – Plutonix

+0

@Plutonix : 그는 "각 버튼은 양식을 열어야하며 양식은 버튼의 일부 데이터를 기반으로합니다"라고 씁니다. 그것이 내가 제안하는 이유입니다. –

+0

1) "양식 작성에 사용 된 방법"을 포함해야하며 2) 외부 이벤트 처리를 필요로하지 않아야한다고 생각합니다. 즉, 사용자 정의 컨트롤의 메서드는 컨트롤의 인스턴스에 설정된 속성을 기반으로 폼을로드합니다. – rheitzman

0

2) 게시물 :

AddHandler()에서 사용하기 위해 만든 버튼 이름의 목록을 유지하십시오.

이 코드는 점에 정확히 아니지만 AddHandler에()가 실행시에 사용할 수있는 방법을 보여줍니다

' hook TextChanged/CheckedChanged for dirty logic 
    Dim chk As CheckBox 
    Dim rdo As RadioButton 
    For Each c As Control In FormDataControls 
     If c.Name.StartsWith("chk") Then 
      chk = c 
      AddHandler chk.CheckedChanged, AddressOf SetDirty 
     ElseIf c.Name.StartsWith("rdo") Then 
      rdo = c 
      AddHandler rdo.CheckedChanged, AddressOf SetDirty 
     Else 
      AddHandler c.TextChanged, AddressOf SetDirty 
     End If 
    Next 

FormDataControls을 대상으로 컨트롤 내 목록입니다. 제 경우에는 Tag 속성을 사용하여 데이터 컨트롤을 지정합니다.

관련 문제