我开始用现有应用程序中的用户控件和拆分容器重组表单。在我有一个名为GlobalFunctions
的课程之前,有一个名为ResetAllForms()
的方法。当我从frmMain
跑GlobalFunctions.ResetAllForms()
这将设置表单中的所有属性,以我想为他们的默认值(禁用/启用,可见或不可见。)无法从WinForms应用程序中的其他类访问UserControl对象
之前,我访问他们像formName.Textbox1.Enabled = True
但现在如果我尝试从用户控件名称调用它们,如UserControlA.Textbox1.Enabled = True
它给我一个错误,指出“引用非共享成员需要对象引用”。我知道这意味着实例化一个用户控件的副本,但我只是从工具箱中拖放,所以我不知道它的名字是什么。
虽然你可以这样做,而且这是一种快速的方法,但最好为你的用户控件提供一个公共的ResetControls方法,并调用它而不是直接访问内部控件。 –
所以我听到你说的是你应该在每个控件上创建一个方法来做到这一点? – CryptoJones
不是强制性规则,但它更好。访问这些属性是以某种方式反对封装。但这是一个折衷。当您决定将这些控件放在某个用户控件中时,您应该看看您的目标。当你创建一个用户控件时,一个目标就是让你的其他应用程序部分与该用户控件的实现和内容无关,也许你决定使用一个蒙面文本框而不是文本框,或者你决定使用数字而不是文本框,在这种情况下,您只能使用公共方法和属性与控件进行交互。 –