[英]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;
}
您需要將“修飾符”設置為至少公共,以便控件的屬性能夠訪問它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.