如何从另一个访问UserControl中的文本框

How to access textbox inside UserControl from another one

所以我有 MainPage 表单,此表单包含三个 UserControl newIngredientrecipeAcrhiverecipesCenter,我尝试访问可见 属性 来自 recipeAcrhiverecipesCenter 因为我想访问 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;

第二种解决方案

MainPageRecipesCenter 创建新实例,然后使用控件 属性 访问文本框并隐藏 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";
}