WinForm에서 모든 컨트롤을 읽을 수 있습니다
문제
버튼 클릭으로 읽기 전용으로 양식에 많은 컨트롤을 설정하고 다시 클릭 할 수 있기를 원합니다. 그들을 통과하는 방법이 있습니까? this.Controls
아마도......
감사!
해결책
모든 컨트롤을 읽도록 설정하려면 다음과 같은 작업을 수행 할 수 있습니다.
foreach(Control currentControl in this.Controls)
{
currentControl.Enabled = false;
}
당신이 정말로하고 싶은 것이 컨트롤 중 일부를 읽도록 설정한다면, 관련 컨트롤 목록을 유지 한 다음 모든 것이 아니라 해당 목록에서 foreach를 수행하는 것이 좋습니다.
다른 팁
활성화 / 비활성화를 쉽게 설정하는 것은 쉽습니다. Gwliosa'a 답변을 참조하십시오.
그러나 모든 컨트롤에 읽기 전용 속성이있는 것은 아닙니다. 다음과 같은 것을 사용할 수 있습니다.
foreach (Control c in this.Controls)
{
if (c is TextBox)
(c as TextBox).Readonly = newValue;
else if (c is ListBox)
(c as ListBox).Readonly = newValue;
// etc
}
개인적으로 나는 모든 컨트롤 (및 하위 제어)을 Panel
- 싱글의 상태를 변경하십시오 Panel
. 즉, 이전 값을 저장할 필요가 없다는 것을 의미합니다 (예 : 다시 활성화 된 것으로 가정하고 싶지 않을 수도 있습니다).
gwllosa에서 제안한 활성화 된 속성을 사용하는 것이 좋습니다.
foreach (Control ctrl in this.Controls)
{
Type t = ctrl.GetType();
PropertyInfo propInfo = t.GetProperty("ReadOnly");
if (propInfo != null)
propInfo.SetValue(ctrl, true, null);
}
제휴하지 않습니다 StackOverflow