从usercontrol访问表单

本文关键字:表单 访问表 访问 usercontrol | 更新日期: 2023-09-27 17:59:40

我有一个用户控件,它需要访问Form1.cs上的变量和静态类。我在谷歌上找不到一个工作示例。有什么提示吗?谢谢

namespace WinApp1
{
public partial class Form1 : Form
{
    Public MyCustomClass myClass; // need to access this
    public Form1()
    {
    }
}
public static class Global {
   public static myGlobalVar; // Need to Access This
}
}

从usercontrol访问表单

在UserControl中使用this.Parent获取父窗体:

Form1 myParent = (Form1)this.Parent;

然后您可以访问公共字段/属性:

myParent.myClass 

请注意,如果UserControl被放置在窗体内的Panel中,则需要获取parent的parent。

您可以通过名称访问静态类:

Global.myGlobalVar 

您可以使用FindForm()

但你应该退一步,看看这是否是最好的解决方案。这是一个很强的依赖性,它降低了控件的可测试性和重用因子。

例如,考虑引入一个包含控件所需成员的接口,并在父层次结构中搜索它,或者将其作为参数注入,。。。

从那时起,你可以控制我的处境。可能还有更多的解决方案。只是想让你思考一下,如果没有什么比依赖表格更好的了。

使用:

frm_main frm;     //frm_main is your main form which user control is on it
frm=(frm_main)this.FindForm();     //It finds the parent form and sets it to the frm

现在你有了主窗体。frm上的任何更改都将反映在主窗体上。如果您想访问主窗体上的指定控件,请使用:

1-创建您想要访问的类型的控件(例如:标签):

Label lbl_main;

2-使用搜索结果返回的控件设置标签:

frm.Controls.FindControl("controlId",true);

3-在标签上进行更改:

lbl_main.Text="new value changed by user control";

您的更改将反映在控件上。希望能有所帮助。

我以为是这样。Parent返回放置用户控件的实际页面?然后访问公共成员

在您的UserControl代码中,在Click事件或其他内容下:

private void sendParamToMainForm_Button_Click(object sender, EventArgs e)
{
    mainForm wForm;
    wForm = (mainForm)this.FindForm();
    wForm.lblRetrieveText.text = "whatever ...";
}

希望这有帮助:-)

如果您的用户控件位于面板内,并且您希望访问表单
您可以使用

        Main_Form myform = (Main_Form)ParentForm;
        MessageBox.Show(myform.Label2.Text);