C#自定义类中如何获取主窗口的控件引用

把问题简化叙述下。我在窗体中拖了一个textBox,命名为“textBox1”。现在我想在一个自己写的类(Class1.cs)里面获取这个textBox控件,我该怎么做?... 把问题简化叙述下。
我在窗体中拖了一个textBox,命名为“textBox1”。现在我想在一个自己写的类(Class1.cs)里面获取这个textBox控件,我该怎么做?
这些方法我都尝试过:
1.在主窗口中声明一个属性为public的textBox对象(设名字为“publicTextBox”),并把textBox1的引用传进去,其他的类通过引用form1.publicTextBox来引用它
结果:这个做法严重破坏了程序的封装性,而且由于混乱的引用,常常导致连环的引用以致程序出错
2.在Class1中声明一个为public的Control对象(设名字为“publicControl”),在主类里面把自己(this)传进去
结果:失败了,publicControl.textBox1程序报错,说不存在
3.在Class1地构造函数中主类的引用传进去
结果:同第二个,也失败了

我觉得,在资源中,我可以通过一个绝对的地址引用到程序的资源(如“global::WindowsApplication1.Properties.Resources;”)。那么有没有一种方法可以引用到主窗口的控件呢?
或者,我的第二个尝试,是不是不能通过“publicControl.textBox1”来进行调用,而是应该借用其他的方法?

求高手指点,谢谢
展开
 我来答
XCExceXCExce
2011-10-02 · TA获得超过647个赞
知道小有建树答主
回答量:237
采纳率:0%
帮助的人:331万
展开全部
global::WindowsApplication1.Properties.Resources是通过一个绝对的地址引用到程序的资源文件,是文件。控件是什么?其实就是一段代码的封装,再加上显示样式,不是资源文件,所以我觉得应该找不到。
您有3中方法,我十分赞成第一种,其余不是太懂,晕晕的。
原因:窗体其实也是一个类,控件只不过是类中的一个全局成员罢了,而且还是私有的(这跟我们平常写的普通类是一样的,全局成员私有,用属性去访问或修改它)。
所以我建议在窗口类中构造该控件的属性方法。其中有两种属性方法
1、为该控件构建一个控件属性
public TextBox myTextBox
{
get { return textBox1;}
}
这种方法,会透漏textbox的所有属性,不够安全。
2、只构造自己想用的属性,比如text属性
public string myTextString
{
set {textBox1.Text=value;}//如果只想获取Text,set就不用写了
get {return textBox1.Text;}
}
这样既方便,安全性也高,完全没必要考虑(结果:这个做法严重破坏了程序的封装性),想想一般类都是属性访问和设置私有成员的
TableDI
2024-07-18 广告
在上海悉息信息科技有限公司,我们深知Excel在数据处理中的重要作用。在Excel中引用不同工作表(sheet)的数据是常见的操作,这有助于整合和分析跨多个工作表的信息。通过在工作表名称前加上感叹号“!”,您可以轻松地引用其他工作表中的数据... 点击进入详情页
本回答由TableDI提供
heroius
2011-10-02 · TA获得超过1178个赞
知道小有建树答主
回答量:746
采纳率:0%
帮助的人:240万
展开全部
winform窗体是分部定义的,窗体类的定义中有partial修饰符修饰,窗体设计器的代码和逻辑代码共同构成一个可视化控件(control类型),展开解决方案资源管理器中窗体图标,能够看见设计器的代码(若窗体名为form1,则逻辑代码位于form1.cs而设计器代码位于form1.designer.cs)。设计器代码包含控件的声明,这些声明均使用private修饰,是设计器自动生成的代码(因为在设计器中拖放,因此代码自动生成,并且不建议编辑)。若要在窗体外部直接使用某控件,可修改form1.designer.cs中的代码,但要注意当使用设计器将此控件修改后,修饰符可能被重置为private(因为代码是自动生成的)。
追问
这个方法我也尝试过,但是仍然没有办法从外部引到这个空间,也许正如您所说,修饰符被重置为private了。
追答
你不妨放一段代码上来,我看看你想怎么用
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lovemingming
2011-10-07 · TA获得超过4137个赞
知道大有可为答主
回答量:1422
采纳率:0%
帮助的人:1402万
展开全部
用你第二种方法就行了啊。。。
publicControl.textBox1
把这个改下,,,
改成
(publicControl as 你那个窗口类的名字,一般是Form1之类的).textBox1
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式