동일한 양식을 사용하여 새 데이터를 입력하고 기존 레코드를 입력합니다. 공급 업체, 재고 항목, 고객 등. 편집 모드에서 모든 텍스트 상자를 읽기 전용으로 설정하고 사용자가 편집 할 레코드를 선택하면 읽기 전용 상태를 false로 재설정합니다. 양식에는 여러 탭 (Telerik의 PageViewPage)이 포함될 수 있습니다. 각 탭에는 읽기 전용 true/false로 설정해야하는 여러 편집 가능한 컨트롤이 포함되어 있습니다.메소드에 대한 매개 변수로 다른 컨트롤 보내기
이 코드를 사용하여 컨테이너 배열을 FormControl이라는 클래스에 보냅니다.
RadGroupBox [] containerList = { this.pageGeneral, this.pageBankDetail, this.pageContact };
FormControl.ControlsReadOnly(containerList, false); // /truefalse to set Read-only status
FormControl 클래스에는 읽기 전용 상태를 설정하는 다음 코드가 있습니다.
public static void ControlsReadOnly(RadGroupBox [] containerList, bool readOnlyStatus)
{
var container = (containerList[0] as RadGroupBox);
for (int i = 0; i < containerList.Length; i++)
{
foreach (var control in container.Controls)
{
RadTextBox textEdit = control as RadTextBox;
if (textEdit != null)
{
textEdit.ReadOnly = readOnlyStatus;
continue;
}
RadMaskedEditBox textMasked = control as RadMaskedEditBox;
if (textMasked != null)
{
textMasked.ReadOnly = readOnlyStatus;
continue;
}
// rest of the code
코드는 잘 작동하지만 명백한 단점은 컨테이너가 RadGroupBox 인 경우에만 작동한다는 것입니다. 폼, 그룹 상자 및 PageViews 호출 형식의 컨트롤 형식을 변경하여 처리 할 동일한 코드를 사용하고 싶습니다.
답변이 Reflection을 포함 할 것으로 생각되지만 해결할 수 없습니다. FormControl 메서드에서 매개 변수 목록을 Control [] containerList로 대체하려고 시도했지만 더 이상 var 변수를 사용할 수 없습니다.
제네릭을 만드는 데 어려움을 겪고있는 것처럼 보입니다. 당신은'var container = (containerList [0] as RadGroupBox); '를 다른 타입들로 대체해야하지 않을까요? 이것은 아마도 단일 방법이 되기에는 너무 어려울 것입니다. 오버로드를 고려한 다음 각 오버로드 (수신기) 내에서 공통 메소드를 호출하십시오. – DonBoitnott
그건 내 첫 번째 생각이었고 실제로 어떻게 구현했는지 각 가능성에 대한 하나의 방법이었습니다. 과부화가 작동 할 수도 있지만 확인하겠습니다. – PeterJ