如何从另一个访问UserControl中的文本框
How to access textbox inside UserControl from another one
所以我有 MainPage
表单,此表单包含三个 UserControl newIngredient
、recipeAcrhive
、recipesCenter
,我尝试访问可见 属性 来自 recipeAcrhive
的 recipesCenter
因为我想访问 recipesCenter 中的文本框然后显示 recipesCenter
但这没用,我已经尝试了很多解决方案,比如
这里的混淆是recipeAcrhive
消失了,recipesCenter
保持不可见
第一个解决方案
从 MainPage
创建新实例然后使用控件 属性 访问 recipesCenter
并访问文本框然后隐藏 recipeAcrhive
最后显示 recipesCenter
frmMainPage frm = new frmMainPage();
frm.Controls["recipesCenter"].Controls["txtName"].Text = "Meet";
this.Visible = false;
frm.Controls["recipesCenter"].Visible = true;
第二种解决方案
从 MainPage
和 RecipesCenter
创建新实例,然后使用控件 属性 访问文本框并隐藏 recipeAcrhive
最后将 RecipesCenter 的实例添加到 MainPage
表单控件中
frmMainPage frm = new frmMainPage();
RecipesCenter rc = new RecipesCenter();
rc.Controls["recipesCenter"].Controls["txtName"].Text = "Meet";
frm.Controls.Add(rc);
第三个解决方案
在 MainPage
中创建方法,在这个方法中,我使 recipeArchive
具有隐藏可见性,recipesCenter
具有显示可见性,并使用 MainPage
实例从 recipeArchive 访问此方法
// inside MainPage
public void showRecipesCenter() {
recipeArchive.Visible = false;
recipesCenter.Visible = true;
}
// inside recipeArchive
frmMainPage frm = new frmMainPage();
frm.showRecipesCenter();
任何人都可以帮助我,让我开心
终于找到解决办法了,代码一定是这样的
public partial class frmMainPage : Form {
public frmMainPage() {
InitializeComponent();
}
private static frmMainPage frm;
public static frmMainPage Instance {
get {
if (frm == null)
frm = new frmMainPage();
return frm;
}
}
private void frmMainPage_Load(object sender, EventArgs e) {
frm = this;
}
}
在您的 UserControl
中,代码必须像这样
public partial class yourUserControl : UserControl {
frmMainPage.Instance.anotherUserControl.txtName.Text = "Stack Overflow";
}
所以我有 MainPage
表单,此表单包含三个 UserControl newIngredient
、recipeAcrhive
、recipesCenter
,我尝试访问可见 属性 来自 recipeAcrhive
的 recipesCenter
因为我想访问 recipesCenter 中的文本框然后显示 recipesCenter
但这没用,我已经尝试了很多解决方案,比如
这里的混淆是recipeAcrhive
消失了,recipesCenter
保持不可见
第一个解决方案
从 MainPage
创建新实例然后使用控件 属性 访问 recipesCenter
并访问文本框然后隐藏 recipeAcrhive
最后显示 recipesCenter
frmMainPage frm = new frmMainPage();
frm.Controls["recipesCenter"].Controls["txtName"].Text = "Meet";
this.Visible = false;
frm.Controls["recipesCenter"].Visible = true;
第二种解决方案
从 MainPage
和 RecipesCenter
创建新实例,然后使用控件 属性 访问文本框并隐藏 recipeAcrhive
最后将 RecipesCenter 的实例添加到 MainPage
表单控件中
frmMainPage frm = new frmMainPage();
RecipesCenter rc = new RecipesCenter();
rc.Controls["recipesCenter"].Controls["txtName"].Text = "Meet";
frm.Controls.Add(rc);
第三个解决方案
在 MainPage
中创建方法,在这个方法中,我使 recipeArchive
具有隐藏可见性,recipesCenter
具有显示可见性,并使用 MainPage
实例从 recipeArchive 访问此方法
// inside MainPage
public void showRecipesCenter() {
recipeArchive.Visible = false;
recipesCenter.Visible = true;
}
// inside recipeArchive
frmMainPage frm = new frmMainPage();
frm.showRecipesCenter();
任何人都可以帮助我,让我开心
终于找到解决办法了,代码一定是这样的
public partial class frmMainPage : Form {
public frmMainPage() {
InitializeComponent();
}
private static frmMainPage frm;
public static frmMainPage Instance {
get {
if (frm == null)
frm = new frmMainPage();
return frm;
}
}
private void frmMainPage_Load(object sender, EventArgs e) {
frm = this;
}
}
在您的 UserControl
中,代码必须像这样
public partial class yourUserControl : UserControl {
frmMainPage.Instance.anotherUserControl.txtName.Text = "Stack Overflow";
}