为啥控件由于其保护级别而无法访问?

Posted

技术标签:

【中文标题】为啥控件由于其保护级别而无法访问?【英文标题】:Why is the control inaccessible due to its protection level?为什么控件由于其保护级别而无法访问? 【发布时间】:2010-12-17 02:34:04 【问题描述】:

我正在尝试从 program.cs 访问控件的文本属性,它说由于受保护级别而无法访问。请问如何解决这个问题?

【问题讨论】:

你想完成什么? FWIW,这样的问题意味着您正在走一条非常紧密耦合的道路(在 myForm 的代码之外访问 myForm.myControl.Text 是个坏主意)。 这是一个坏主意,仅仅是因为它可能不安全吗?还是还有其他原因? 这是个坏主意,因为它暴露了比它需要的更多的实现细节。如果您将来决定用下拉选项列表替换文本框怎么办? 嗯嗯点了。感谢您清除 arikkallen :) 【参考方案1】:

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

    进入包含指定控件的窗体的设计视图 然后将控件的修饰符属性更改为公共或内部。

【讨论】:

注意:只是为了强调这一点,因为提问者似乎很不清楚,这是受保护的控件实例本身(即持有控件的变量),不是 .Text 属性,它是公开的。 值得一提的是 SEO,这也适用于 xamarin XAML【参考方案2】:

使用x:FieldModifier="public" 例如

<TextBlock x:FieldModifier="public" x:Name="AccessibleTextBlock" />

这里解释:Modifying XAML named field visibility

就我而言,我将 UserControl 放在另一个 DLL 中。 WPF 的约定是默认将所有命名字段设置为internal。使用x:FieldModifier="public" 解决了这个问题。

【讨论】:

问题被标记为 WinForms。没有 XAML。 无论如何回答对 WPF 有帮助,感谢 Google 结果【参考方案3】:

背后的概念是保护级别。正如我们在 Object Oriented Paradigm 中所研究的那样,将您的类成员变量保持私有并从 Property 设置或获取它。这就是为什么它不是一个好方法

【讨论】:

【参考方案4】:

控制保护级别已解决

通过 ID 转到设计器文件搜索控件,例如 txtModel 将 protected 修饰符更改为 public 修饰符

【讨论】:

这不是一个好主意。更好的是通过使用控件的类的属性来访问控件的值。 @asad 直接访问子控件不是一个好主意,因为如果不更新祖父母就无法更改/维护/修改子控件。这是封装。

以上是关于为啥控件由于其保护级别而无法访问?的主要内容,如果未能解决你的问题,请参考以下文章

ConfigurationProperty 由于其保护级别而无法访问

c# 资源中的 SmtpClient 由于其保护级别而无法访问

未序列化的结构列表列表。 System.RuntimeType 由于其保护级别而无法访问。只能处理公共类型

由于“内部”保护级别而无法访问

由于其保护级别,“Microsoft.SharePoint.MailMessage”无法访问

'var_name'未声明。由于其保护级别,它可能无法访问。在调试模式下