C# 为什么控件由于其保护级别而无法访问?

C# 为什么控件由于其保护级别而无法访问?,c#,winforms,controls,C#,Winforms,Controls,我试图从program.cs访问控件的text属性,它说由于受保护的级别,无法访问该属性。如何解决此问题?这是控件的默认属性,可以通过以下方式解决: 进入包含指定控件的窗体的设计视图 然后将控件的Modifiers属性更改为Public或Internal 已解决控制保护级别问题 按ID转到设计器文件搜索控件,例如txtModel将受保护的修改器更改为公共的修改器背后的概念是保护级别。正如我们在面向对象范例中所研究的,将类成员变量保持为私有,并设置或从属性获取它。这就是为什么它不是一个好方法的原因

我试图从program.cs访问控件的text属性,它说由于受保护的级别,无法访问该属性。如何解决此问题?

这是控件的默认属性,可以通过以下方式解决:

  • 进入包含指定控件的窗体的设计视图
  • 然后将控件的Modifiers属性更改为Public或Internal
    已解决控制保护级别问题


    按ID转到设计器文件搜索控件,例如txtModel将受保护的修改器更改为公共的修改器背后的概念是保护级别。正如我们在面向对象范例中所研究的,将类成员变量保持为私有,并设置或从属性获取它。这就是为什么它不是一个好方法的原因。

    使用
    x:FieldModifier=“public”
    e、 g

    
    
    如下文所述:


    在我的例子中,我将UserControl放在另一个DLL中。WPF的惯例是默认情况下将所有命名字段设置为
    internal
    。使用
    x:FieldModifier=“public”
    解决了这个问题。

    你想完成什么?FWIW,这样的问题意味着你正在走一条紧密耦合的道路(在myForm的代码之外访问myForm.myControl.Text是个坏主意)。这是个坏主意吗?仅仅因为它可能不安全?或者还有其他原因吗?这是一个坏主意,因为它暴露的实现细节比它需要的要多。如果您将来决定用下拉列表替换文本框,该怎么办。谢谢你澄清了这一点(arikkallen:)注意:只是强调一下,因为询问者似乎对此非常不清楚,这是受保护的控件实例本身(即,持有控件的变量),而不是
    .Text
    属性,这是公开的。值得指出的是,对于SEO来说,这在xamarin XAML中也有效。这不是一个好主意。最好是通过使用控件的类的属性来访问控件的值。@另外,直接访问子控件不是一个好主意,因为如果不更新父控件,就不能更改/维护/修改子控件。这是封装。问题被标记为WinForms。没有XAML。无论如何,由于谷歌的搜索结果,这个答案对WPF有帮助
    <TextBlock x:FieldModifier="public" x:Name="AccessibleTextBlock" />