[英]Method call from another form
我試圖從子窗體調用我父窗體上的方法,子窗體又調用我的自定義用戶控件中的方法。 如果我這樣做,我就能打電話......
以兒童形式:
private void btnSaveNode_Click(object sender, EventArgs e)
{
frmMain frm = new frmMain();
frm.getNodeData(txtPartName.Text);
this.Hide();
}
在父母形式:
public void getNodeData(string partNbr)
{
string strPartNbr = partNbr;
buildNode(strPartNbr);
}
public void buildNode(string partNbr)
{
drewsTreeView tv = new drewsTreeView();
tv.addNode(partNbr);
}
最后,用戶控件中的方法
public void addNode(string strPartNbr)
{
btnNode.Location = new Point(13, 13);
btnNode.Width = 200;
btnNode.Height = 40;
//btnNode.Text = strPartNbr;
btnNode.Text = "Testing";
this.Controls.Add(btnNode);
btnNode.Click += btnNode_Click;
}
所以我的問題是,按鈕不會在addNode()方法中構建。 如果我在主窗體的onLoad事件中調用該方法,它就構建得很好。 我在調試模式下運行,我可以看到方法被調用,正確的參數被傳遞。
那么為什么它會在從父級調用時構建按鈕,而不是從子級調用時?
一種方法是將您的frmMain
實例傳遞給Form.Show()方法:
// ... in frmMain, displaying the "child" form:
frmChild child = new frmChild(); // <-- whatever your child type is
child.Show(this); // passing in a reference to frmMain via "this"
現在,在您的子表單代碼中,您可以將Form.Owner屬性轉換回您的frmMain
類型並使用它執行某些操作:
private void btnSaveNode_Click(object sender, EventArgs e)
{
frmMain frm = (frmMain)this.Owner;
frm.getNodeData(txtPartName.Text);
// ...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.