2016-08-15 36 views
0

我在VB.Net上长大。从那里,在例程中,我可以实例化一个表单,并访问我在表单上放置的控件,如文本框。此外,在隐藏表单之后,我可以读取在表单上设置的公共属性。我正在尝试在C#中完成此操作,并且根据智能感知,这两种操作都无法访问。如何在C#WinForms中无法访问公共属性或用户集控件?

所以,形式1,比如我说

Form f = new MyOtherForm(); 
从那里

,F只返回如文本,或标记的东西.....我不能看到F设定他们的任何控制。

此外,MyOtherForm有一个名为MyResult的公共属性。在VB.Net显示对话框后,我可以从调用窗体访问 f.MyResult

在C#中,我不能。

有人能帮我理解它在C#中的工作原理吗?

+2

你正在将你的表单视为一个普通的“Form”,它没有你添加的这些属性。将声明更改为'MyOtherForm f = new MyOtherForm();'告诉编译器,您确实希望将'f'视为'MyOtherForm',而不仅仅是一个空的'Form'。 –

+1

添加到@GlorinOakenfoot提到的内容,转到'Option Strict On' ...这样的事情会更容易被捕获。否则,你是依靠编译器来铸造它,如果它可以... – Codexer

+0

'f.Controls'包含对'MyOtherForm'中的所有控件的引用 –

回答

3

如果你想看到MyOtherForm的属性时,应申报形式MyOtherForm:

MyOtherForm f = new MyOtherForm(); 

除此之外,你也应该检查,如果你正在寻找的属性设置为public

+0

@ebick这个答案是正确的方法,因为它给你的实际类不是一个基类MyOtherForm可能比基础对象(即添加的控件)具有更多的对象,就像创建从另一个派生的类(继承 - 注意您的表单继承) - 您不会调用基类。访问继承类的成员 - 它们不存在。 – Ken

1

为了让您的生活更轻松,学习并喜欢var关键字。

这种引入的隐式键入允许您在声明变量时不必担心获取正确的类型。就你而言,你确切知道你在设置什么,所以这不是一个大问题。但是,当您从方法或LINQ调用中获得结果时,这提供了巨大的好处。

请记住,这不像JavaScript中的var关键字。您的变量仍然具有正确的类型,只有您不必明确设置它。

相关问题