首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# WinForms 委托跨表單呼叫:解決「物件參考未設定為物件實例」錯誤

     編輯:程式設計綜合問答

在 Windows Forms 應用程式中,子表單(AddForm)需呼叫父表單(RedoForm)的公用方法 load() 重新載入資料。常見做法是透過屬性暴露父表單參考:

public RedoForm pForm { get; set; }

但在呼叫 this.pForm.load() 時拋出 NullReferenceException,原因在於 pForm 尚未被指派實例。

正確初始化流程

  1. 父表單建立子表單時,將 this 傳入:
var child = new AddForm(...);
child.pForm = this;  // 關鍵步驟
child.Show();
  1. 或在子表單建構子要求父表單參考:
public AddForm(RedoForm parent) {
    InitializeComponent();
    this.pForm = parent;
}

替代方案:事件與委派

更鬆耦合的做法是讓子表單定義事件,父表單訂閱:

// 子表單
public event Action RefreshRequested;
private void OnRefresh() => RefreshRequested?.Invoke();

// 父表單
child.RefreshRequested += () => this.LoadData();

此模式避免子表單直接依賴父表單具體型別,符合「依賴倒置原則」,且天然解決空參考問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved