나는 내 연구를 수행하고이를 이해했다고 생각했지만 한 형식에서 다른 형식으로 데이터를 전달하려고 시도하면 프로그램에서 예외가 발생합니다. 대리자를 사용하여 한 함수를 다른 함수에서 호출하려고합니다. 내가 가진 코드는 다음과 같습니다. 부모 폼에서C# 대리자가 예외를 throw하는 중
: 자식 폼에서
private void viewListToolStripMenuItem_Click(object sender, EventArgs e)
{
frmDataView dataview = frmDataView.GetInstance();
if (dataview.Visible)
dataview.BringToFront();
else
{
dataview.GotoRecord += GotoRecord;
dataview.Show();
}
}
private void GotoRecord(int index)
{
Current.record = index;
loadRecord(index);
setNavButtons();
}
, 나는 다음과 같은 코드로 부모 폼에 GotoRecord를 호출하려고 해요 :
내가 코드를 실행할 때마다public partial class frmDataView : Form
{
AdvancedList<ScoutingRecord> displayedData = new AdvancedList<ScoutingRecord>(Current.data);
// Set the form up so that only one instance will be available at a time.
private static frmDataView _instance;
public static frmDataView GetInstance()
{
if (_instance == null)
_instance = new frmDataView();
return _instance;
}
public delegate void GotoRecordHandler(int index);
public GotoRecordHandler GotoRecord;
private void dgvMain_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
int row = e.RowIndex;
int teamnumber = (int)dgvMain.Rows[row].Cells["TeamNumber"].Value;
int matchnumber = (int)dgvMain.Rows[row].Cells["MatchNumber"].Value;
ScoutingRecord sr = Current.data.FirstOrDefault(x => x.TeamNumber == teamnumber && x.MatchNumber == matchnumber);
//int index = Current.data.IndexOf(sr);
GotoRecord(Current.data.IndexOf(sr));
}
, 그것은 다음과 같은 예외가 발생합니다 :
GotoRecord가 null이었다을
나는 간단한 것을 놓치고있는 것처럼 느껴집니다. 이 작업을 수행하는 방법에 대한 제안 사항은 무엇입니까? 외젠으로
'GotoRecord was null'이 실제 예외 메시지입니까? 그건 표준 메시지가 아니에요 ... – DavidG
이벤트에 구내 구독자가없는 것 같습니다. Microsoft는 이벤트 처리기를 호출하는 표준 방법을 규정합니다. C# 6에는 더 좋은 해결 방법이 있습니다. 그냥 구글 깨끗한 이벤트 처리기 호출 - 존 Skeet 그것에 좋은 기사가 있습니다. –
'frmDataView.GetInstance()'에 대한 호출이 Visible 속성이 true로 설정된 상태로 반환되면 처음에는 GotoRecord 이벤트가 할당되지 않고 null이됩니다. – David