Form2 を使用してデフォルトのプリンターを更新し、文字列を Form3 に送信しています。通常、Form1 から操作して Form2 または Form3 にデータを渡すことに問題はありません。しかし、Form2 を使用して Form3 を更新するのに問題があります。
実際の名前は、Form1 = Form1、Form2 = formUserSettings、Form3 = formViewDwg です。
Form2 (formUserSettings) を呼び出す Form1 のコードは次のとおりです。
private void configureStartupSettingsToolStripMenuItem_Click(object sender, EventArgs e)
{
formUserSettings frmUsr = new formUserSettings(prnNameString, prnDriverString, prnPortString,
Settings.Default.DefaultPrinter.ToString(), Settings.Default.ViewStyle, Settings.Default.ReCenterEVafterDwgClose,
Settings.Default.SyncListDwgNum, listMain);
frmUsr.ValueUpdated += new ValueUpdatedEventHandler(frmUsr_ValueUpdated); //---added 3-22-12
//frmUsr.ValueUpdated2 += new ValueUpdatedEventHandler(newPrn_ValueUpdated); //---added 4-12-12
frmUsr.ShowDialog();
frmUsr.Close();
}
Form3 (formViewDwg) にプリンター名を送信しようとする Form2 (formUserSettings) 内のコードを次に示します。
if (Application.OpenForms.OfType<formViewDwg>().Count() > 0)
{
newEntry = comboPrinters.Items[index].ToString();
formViewDwg frmVd = this.Owner as formViewDwg;
delPassData del = new delPassData(frmVD.passedNewVal);
del(newEntry);
}
else
{
frmVD = new formViewDwg(EViewMethods.currentPartPath, EViewMethods.currentPartNum, EViewMethods.currentDwgNum,
Settings.Default.DefaultPrinter, Settings.Default.DefaultPrinterDriver, Settings.Default.DefaultPrinterPort,
EViewMethods.defaultPrn[0], EViewMethods.defaultPrn[1], EViewMethods.defaultPrn[2], lBox, false, false);
newEntry = comboPrinters.Items[index].ToString();
delPassData del = new delPassData(frmVD.passedNewVal);
del(newEntry);
}
Form3 (formViewDwg) の内部は次のとおりです。
public void passedNewVal(string newPrn) // using the delegate "delPassData" declared in formUserSettings
{
try
{
comboPrinter.Text = newPrn;
}
catch
{
}
}
エラーは、「インスタンス メソッドへのデリゲートは null 'this' を持つことはできません」です。