2012-07-08 3 views
0

나는 C#에서 여러 양식을 포함하는 Windows 양식 응용 프로그램을 만들고 있습니다.
ShowDialog()를 사용하여 주 양식에서 두 번째 양식을 호출합니다.Windows 이상한 함수 호출 점프

그런 다음 사용자 지정 개체로 두 번째 폼의 콤보 상자를 채우려고합니다. 사용자 정의 클래스에는 DataTable을 ArrayList로 변환하는 메소드가 있습니다. 그러나 ArrayList에 항목을 추가하려고 할 때마다 SplitPanel 페인트 이벤트의 이벤트 핸들러가 발생합니다. 또한이 패널은 기본 폼에 배치됩니다.

private void frmInsertSurovina_Load(object sender, EventArgs e) 
    { 
     if (mode == 0) button1.Text = "Внеси"; 
     else button1.Text = "Зачувај"; 

     DB data=new DB(); 
     DataTable devizi = data.GetDevizi(); 
     DeviziCollection collDevizi = new DeviziCollection(); 
     collDevizi.LoadCollection(devizi); 
     cmbDeviza.DataSource = collDevizi.Collection; 
     cmbDeviza.DisplayMember = "Text"; 
     cmbDeviza.ValueMember = "Value"; 

     //some other code here 
    } 

이 사용자 정의 클래스는 : 나는 콤보 상자를 채우는 곳

frmInsertSurovina insertSurovina = new frmInsertSurovina(0); 
     insertSurovina.ShowDialog(); 

이것은 : 이것은 내가 두 번째 폼을 표시 곳이다

: 여기

코드입니다 :

public class DeviziCollection 
{ 
    public ArrayList Collection { get; set; } 
    public DeviziCollection() 
    { 
    } 
    public void LoadCollection(DataTable table) 
    { 
     foreach (DataRow row in table.Rows) 
     { 
      Deviza item = new Deviza(); 
      item.Text = row["Naziv"].ToString(); 
      item.Value = row["ID"].ToString(); 
      Collection.Add(item); 
     } 
    } 

} 

마지막 행의 Collection.Add(Item);에서 frmInsertSurovina_Load 부리가 실행되고 프로그램이 어딘가에 점프합니다. (페인트 이벤트가 발생하기 전에 언급했지만 코드에서 삭제하고 더 이상 발생시키지 않습니다. 디버깅 할 때 프로그램은로드 이벤트 핸들러가 완료되지 않은 상태로 계속 작동합니다. Paint 이벤트 핸들러의 코드는 두 번째 폼을 호출하는 코드 블록 바로 뒤에있었습니다).

버그 일 수 있습니까? 도와주세요!

+0

디버거가 활성화되어있는 동안 코드를 변경 했습니까? –

+0

나는 정말로 기억할 수 없다. 그러나 나는 생각하지 않는다. ... 그게 문제가 될 수 있니? 어떻게 되돌릴 수 있습니까? –

답변

0

결국 예외입니다. LoadCollection() 메서드에서

Collection=new ArrayList(); 

을 추가했습니다.