2012-07-23 1 views
2

C#의 flowlayoutpanel 안에있는 체크 박스의 값을 업데이트하려고합니다. 확인란은 생성되고 "selected1"이라는 각 패널에 대해 생성됩니다.흐름 레이아웃 패널에서 확인란 값에 액세스하는 방법은 무엇입니까?

: 나는라는 오류 CheckBox의 객체를 생성하고 값으로 Name 속성을 얻고 얻기 위해 내가 노력했습니다

flowLayoutPanel2.Controls[e.Index].Controls["selected1"] 

사용하고 시도하고 코드의 특정 체크 박스에 액세스하려면

System.NullReferenceException: Object reference not set to an instance of an object. 

내가 사용하는 코드는 다음과 같습니다

try 
{ 
    System.Windows.Forms.Control checkBox = new System.Windows.Forms.Control(); 
    checkBox = flowLayoutPanel2.Controls[e.Index].Controls["selected1"]; 
    MessageBox.Show(Convert.ToString(checkBox.Name)); 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(Convert.ToString(ex)); 
} 

내가 아마 수표를 액세스를 시도하는 것 같아 상자를 잘못된 방향으로 둘러싼 것처럼, 패널에 액세스하려고하는 것처럼 아무 문제없이 패널을 조작 할 수 있습니다.

감사합니다, 샘

+1

이 코드는 어떤 메소드입니까? 확인란의 click 이벤트 핸들러? e (인덱스)가 어디서 오는가? – Eddy

+0

동일한 데이터를 표시하는 목록보기의 이벤트 핸들러에 있습니다. 지금은 해당 목록보기 확인란을 업데이트하는 흐름 레이아웃 패널의 확인란이 있지만 역순으로 수행하려고 애 쓰고 있습니다. e는 목록보기 확인란입니다. e.Index는 색인이며 같은 순서 인 동일한 번호가 매겨진 패널입니다. –

+1

아래 질문에 답을 한 Q가 아니지만 "= 새로운"부분은 필요 없습니다. 다음 줄에 변수를 다시 지정하므로 사용되지 않는 컨트롤이 만들어집니다. 또한 checkBox.Name은 문자열이므로 Convert.ToString()도 필요하지 않습니다. – Eddy

답변

2

그것은 e.Index은 어디에서 오는 명확하지,하지만 난 그게 필요하다고 생각하지 않습니다 당신이 가치에 관심이 있다면

CheckBox checkBox; 
if (flowLayoutPanel2.Controls.ContainsKey("selected1")) { 
    checkBox = (CheckBox)flowLayoutPanel2.Controls["selected1"]; 
} 

, 아마 사용하는 것이 가장 좋습니다 컨트롤 대신 CheckBox.

+0

감사합니다. 그렇게하는 것이 더 합리적입니다. 나는 ContainsKey 함수를 알아 내지 못했습니다. –