3

我有一个用户控件,需要访问 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
}
}
4

6 回答 6

7

在 UserControl 中使用this.Parent以获取父表单:

Form1 myParent = (Form1)this.Parent;

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

myParent.myClass 

请注意,如果将 UserControl 放置在 Form 内的 Panel 中,您将需要获取父级的父级。

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

Global.myGlobalVar 
于 2013-02-17T13:12:27.513 回答
5

您可以使用 FindForm()

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

例如,考虑引入一个包含控件所需成员的接口,并在父级 hiracy 中搜索它或将其作为参数注入,...

从那里你可以控制我的情况。可能还有更多的解决方案。只是想让你想如果没有什么比依赖表格更好的了..

于 2013-02-17T13:27:52.027 回答
3

利用 :

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";

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

于 2013-07-01T06:51:58.500 回答
1

我以为 this.Parent 返回放置用户控件的实际页面?然后你访问公共成员

于 2013-02-17T13:20:39.777 回答
0

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

private void sendParamToMainForm_Button_Click(object sender, EventArgs e)
{
    mainForm wForm;
    wForm = (mainForm)this.FindForm();

    wForm.lblRetrieveText.text = "whatever ...";
}

希望这可以帮助 :-)

于 2018-09-11T19:40:44.903 回答
0

In case your user control is inside panels and you want to access the form
you can use

        Main_Form myform = (Main_Form)ParentForm;
        MessageBox.Show(myform.Label2.Text);
于 2019-04-06T14:41:58.957 回答