求助:form2无法访问form1里的控件,这是为什么

marsboy1114 2008-10-12 01:17:55
编写一个记事本,FORM1是主窗口,FORM2是查找替换的窗口,但运行时出现如下错误:“notepad.Form1.richTextBox1”不可访问,因为它受保护级别限制。
该怎么解决?
求助
...全文
236 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
afena 2009-05-12
  • 打赏
  • 举报
回复
很受用,多谢啦
marsboy1114 2008-10-13
  • 打赏
  • 举报
回复
多谢,受教了
brallow 2008-10-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 marsboy1114 的回复:]
请教1楼的大哥,应该用什么方法比较好?
我今天才上计算机研一,以前不是学这个的,所以很多都不会,请多指教
[/Quote]
封装你的应用,提供应用级别的公共接口,而不是对象级的接口。除非你的这两个窗口之间本来就是紧耦合的,有相当多复杂的调用。
对于这种情况,你可以这样做,但是最好是把这两个窗口封装成一个对象。

假设你的窗口1(form1)的load函数中要修改窗口2(form2)中某个TextBox(txtBox1)的颜色,除此以外其它操作均不需要。比如:位置,大小,背景色等都不会用到。
如果使用我之前用到的方案,设置该对象为public,当然可以达到你的目的。
public void form1_load()
{
form2.txtBox1.Color = Color.Red;
}

但你也可能由于某个原因,写了这样一段错误的代码:
public void form1_load()
{
form2.txtBox1.Color = Color.Red;
form2.txtBox1.Visible = False; //本来你不打算这样做,但你隐藏了这个控件。
}



但如果改为这种方案:
//在form2中定义一个公共方法:
public void SetTxtBox1Color(Color c)
{
txtBox1.Color = c;
}
//调用时执行
public void form1_load()
{
form2.SetTxtBox1Color(Color.Red);
form2.txtBox1.Visible = False; //即使你故意要破坏要隐藏该控件,也无法成功,因为无法通过编译。
}


如果在form1中不仅仅需要访问颜色属性,还需要访问诸如位置、大小、背景色、字体、锚点等很多属性,那么一一使用这种接口就不合适,他们之间的应用应该理解为是紧耦合的。

对于你这种情况,一般应考虑自己的设计是否合理。之所以VS默认情况下控件是私有的也正是基于这一考虑:一个窗口访问另一窗口的控件一般是不需要的。
zhang95599 2008-10-12
  • 打赏
  • 举报
回复
在form1里面写一个richTextBox类型的public属性返回richTextBox控件,然后再form2里面访问这个属性就可以访问From1的richTextBox控件了!
Deathsign 2008-10-12
  • 打赏
  • 举报
回复
在design里面把访问型改成pulic
marsboy1114 2008-10-12
  • 打赏
  • 举报
回复
请教1楼的大哥,应该用什么方法比较好?
我今天才上计算机研一,以前不是学这个的,所以很多都不会,请多指教
Eagle_ice 2008-10-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 phy 的回复:]
基本看出楼主一个初学者,从你现在的角度上面的方法可行。但长远来看,还是不建议使用这种方法访问另外一个窗口中的控件。
[/Quote]
2楼说的是 从长远看来....
Fibona 2008-10-12
  • 打赏
  • 举报
回复
在form1里面将控件的访问级别更改成public,默认是private,
要访问form1里面的其它属性也可以将对应的改成public即可
sias_summer 2008-10-12
  • 打赏
  • 举报
回复
控件的访问属性设置为public或Internal就可以解决了
brallow 2008-10-12
  • 打赏
  • 举报
回复
基本看出楼主一个初学者,从你现在的角度上面的方法可行。但长远来看,还是不建议使用这种方法访问另外一个窗口中的控件。
brallow 2008-10-12
  • 打赏
  • 举报
回复
控件默认是private,如果你一定要访问,请选中该控件,然后调整它的Modifier属性为public或者Internal。

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧