【发布时间】:2012-04-17 21:39:51
【问题描述】:
我正在使用 Form2 更新默认打印机并将字符串发送到 Form3。我通常从 Form1 操作并将数据传递到 Form2 或 Form3 没有问题。但是使用Form2更新Form3有问题!
实名是:Form1 = Form1, Form2 = formUserSettings, Form3 = formViewDwg
这里是Form1中的代码,调用Form2(formUserSettings):
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();
}
这是 Form2 (formUserSettings) 中的代码,它尝试将打印机名称发送到 Form3 (formViewDwg)。
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'”。
【问题讨论】:
-
我不明白 formViewDwg 怎么可能成为 formUserSettings 的所有者。
-
我正在尝试让 formUserSettings 将新的打印机名称字符串发送到 formViewDwg。您在上面看到的代码大约是第四次尝试这样做。我也使用过:string newEntry = comboPrinters.Text; ValueUpdatedEventArgs valueArgs = new ValueUpdatedEventArgs(newEntry); ValueUpdated(this, valueArgs); ValueUpdatedEventArgs valueArgs2 = new ValueUpdatedEventArgs(newEntry); ValueUpdated2(this, valueArgs2);
-
但我得到“对象引用未设置为对象的实例”。
-
我也试过了: ValueUpdatedEventArgs valueArgs2 = new ValueUpdatedEventArgs(newEntry); ValueUpdated2(frmVD, valueArgs2);但是得到“对象引用未设置为对象的实例”。
标签: c# .net winforms visual-studio-2010