簡體   English   中英

在c#中調用父表單的方法

[英]calling method of parent form in c#

我已經打開了一個主變形並調用了一個像這樣的子形態

     Form4 f = new Form4();
     f.Owner = this;
     f.Show(this);

在form4中,用戶選擇一個文本文件,其內容將顯示在mainform的textBox1中

我正在嘗試類似的東西

Owner.textBox1.Text = "file contents";

但它不起作用

將不同形式鏈接在一起的最佳方式是通過事件。 Form4創建一個類似FileSelected的事件,然后執行以下操作:

Form4 f = new Form4();
f.FileSelected += (owner, args) => {
    textBox1.Text = args.FileName;
};
f.Show(this);

除此之外,這是非常糟糕的設計,您需要使textBox1成為主窗體的公共成員,並將f.Owner強制轉換為主窗體類型。

喜歡:

 Form4 f = new Form4();
 f.Owner = this;
 f.Show(this);

 // Inside Form4
 MainForm main = this.Owner as MainForm;
 if (main != null) main.textBox1.Text...

最佳做法是為自己定義一個屬性,該屬性本身將設置私有控件的Text屬性。 這是一個實例:

public partial class MainForm : Form {
    public string ContentDescription {
        set {
            textBox1.Text = value.trim();
        }
    }
}

之后,您將能夠通過類型轉換訪問此屬性到您的特定類型:

public partial class SecondaryForm : Form {
    public MainForm OwnerForm {
        get {
            return (MainForm)this.Owner;
        }
    }

    public void someMethod() {
        OwnerForm.ContentDescription = "file contents";
    }
}

請記住,在C#中,每個Control都被聲明為私有。 因此,要訪問它,最佳做法是定義一個屬性,該屬性將授予您對它的必需訪問權限。 將成員公開通常不是一個好主意,取決於你想要實現的目標。

編輯對於解析方法,也許您應該考慮將其設置為公共或內部,以便您可以通過子表單的正確類型轉換的所有者屬性來訪問它。

制作一個hlper類可能是正確的解決方案,因此它不依賴於GUI。

Form4您可以將Owner Form4轉換為正確的類型:

var o = (Form1) this.Owner;
o.textBox1.Text = "file contents";

為此,所有者必須是Form1類型,並且該類型上的textBox1必須是公共成員或屬性。

由於Andrew已經為事件驅動提供了正確的解決方案,因此還提供了一種同步(或阻塞)方法:

Form4 f = new Form4;
if(f.ShowDialog() == DialogResult.OK)
{
    textBox1.Text = f.FileName;
}

您需要將“修飾符”設置為至少公共,以便控件的屬性能夠訪問它。

替代文字http://gabecalabro.com/gabe/Capture.PNG

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM