为啥控件由于其保护级别而无法访问?
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 由于其保护级别而无法访问。只能处理公共类型