C#

2016-11-07 5 views
-1

에서 여러 유형의 여러 컨트롤에 대한 공통 이벤트 처리기 여러 필드 (텍스트 상자, 확인란, 숫자 상향 조절)로 양식을 만듭니다.C#

양식로드시 데이터베이스를 가져 와서 기존 데이터로 채 웁니다.

사용자가 필드를 변경하면 해당 정보를 데이터베이스로 보내야합니다.

는 지금, 나는 각각의 제어를위한 하나의 이벤트가 (3 checkedChanged, 4 TextChanged, 3 ValueChanged 2 SelectedIndexChanged).

bool 배열을 가져 왔는데, 변수를 True로 설정하고 배경색을 변경합니다. 사용자가 저장을 클릭합니다 때,이 배열을 분석하고 새 값으로 데이터베이스에 명령을 보내드립니다

bool[] bChangedValues = new bool[12]; 

private void tbName_TextChanged(object sender, EventArgs e) 
{ 
    tbName.BackColor = CHANGED_COLOUR; 
    // Set the flag to true to indicate value is changed 
    bChangedValues [Name_Index] = true; 
} 

private void chIEnable_CheckedChanged(object sender, EventArgs e) 
{ 
    chIEnable.BackColor = CHANGED_COLOUR; 
    // Set the flag to true to indicate value is changed 
    bChangedValues [IEnable_Index] = true; 
} 

등등 ....

나는 이것이 나쁜 구현이라는 것을 알고 있습니다. 일반적인 이벤트 처리기가 훨씬 쉬울 것입니다. 나는 this 대답을보고 내 문제에 적합하다고 생각했습니다. 그렇다면 sender에서 BackColor 등의 속성에 어떻게 액세스 할 수 있습니까?

서로 다른 컨트롤 유형의 이벤트 처리기를 하나로 묶고 해당 이벤트 처리기에서 컨트롤의 속성에 액세스하는 방법이 필요합니다. 당신은 당신이 너무 bChangedValues을 설정할 수, 제어의 Tag에 인덱스의 이름을 추가하면 내가 C#을 사용하고

+1

송신자를 '제어'유형으로 전송합니다. ((제어) 발신자) .BackColor'. Thats 컨트롤은'Control'에서 상속 받고'Control'는'BackColor' 속성을 갖습니다. – Fabio

+0

@Fabio 감사합니다! 완벽하게 작동! 이것이 내가 StackOverflow를 좋아하는 이유입니다 :-) – Swanand

답변

1

4.0 .NetFramework.

private void Control_ValueChanged(object sender, EventArgs e) 
{ 
    var control = (Control)sender; 
    control.BackColor = CHANGED_COLOUR; 
    bChangedValues[control.Tag] = true; 
}