编程论坛's Archiver

a402730324 发表于 2007-11-16 12:21

讨论一下form1类的使用

我想了好长时间想不通,form1感觉就像C&amp;C++里面的main吧,当我往form1里面拖放窗体的时候应该是在往form1类里面添加对象成员,然后程序的执行应该是通过form1生成一个对象来完成的吧,还有书上说多重窗体之间可以相互访问,可是我试验后发现不能完全相互访问,比如form1里面的textbox.text的内容,不能通过在form2里面new form1生成的一个对象来访问,所以说要想在两个窗体之间实现共享的话只能通过moudle.<br><br><br><br>这是我自己的想法,请大家多多指教。
[align=right][color=#000066][此贴子已经被作者于2007-11-16 12:22:06编辑过][/color][/align]

bygg 发表于 2007-11-16 12:38

把控件访问权限设成public 不就可以访问了吗?

ncqingchuan 发表于 2007-11-16 12:59

如果你用NEW FORM1想控制FORM1上的TEXTBOX控件,这肯定是错误的。NEW FORM1相当于以FORM1为蓝本创建了的副本,你最后操作的TEXTBOX实际是对副本上的TEXTBOX而不是真正意义上的FORM1的TEXTBOX控件,所以你的代码应该改成 <BR>shared f1 as form1<BR>f1=form1<BR>f1.TextBox1.Text = f2.TextBox1.Text<BR>这样你就可以操作FORM1上的TEXTBOX控件了。

a402730324 发表于 2007-11-16 14:21

刚才了解了一下shared关键字,发现shared比C++中的static限制性更强,static对变量只是延长了它的生存期,而shared却是只生成一个同种类型的变量(变量类型为clas || structure),值存储一次,这一点有点像全局变量。也就说shared声明的变量可以全局访问,只存储在一个地方。其他的事件过程属性跟C++里面的很像,不过如果这些过程里面又static的话,还是要按照shared来说的,就数它大。<br><br><br>不过我说的new form1是我们的书上说的,这本书应该比较权威,是同济大学的两位教授编写的,我之前看的时候就觉得有问题。。<br>呵呵谢谢上面的朋友啦,那您是否可以讲一下vb.net的运行机制,再一次谢谢啦。
[align=right][color=#000066][此贴子已经被作者于2007-11-16 15:49:37编辑过][/color][/align]

a402730324 发表于 2007-11-16 14:45

刚试了一下确实能用,但是为什么要让frm1=form1呢?这个是对frm1进行初始化吗?

ncqingchuan 发表于 2007-11-16 19:52

回复:(a402730324)刚试了一下确实能用,但是为什么...

其实教授讲的没有错,FORM1其实也是类啊,你用dim f1 NEW FORM1的话就相当于在内存中又分配了一个位置而且按照FORM1进行初始话,你再操作F1.TEXTBOX的话就相当于操作的是在内存另一个地方的东西了而不是你实际在程序中看见的FORM1了。而F1=FORM1相当于将FORM1赋值给F1你对F1的操作当然就可以看见了。

a402730324 发表于 2007-11-17 15:05

用类进行赋值还是第一次看到,怎么想都觉得不符合常理,如果说成是初始化还好理解一点。<BR>那个教授说的却是有点问题,她要讲的是多重窗体之间的相互访问,但是给的方法却是不行,明显NEW 是新建了以窗体,访问不到的。<BR>

javic 发表于 2007-11-20 13:08

<P>Form1是一个类(class),所以如果Form2要访问Form1的内容的话,那就要以Form2的实例(instance)去访问Form1的实例的成员或函数。 如果Form2在Form1里面, 形成MDI窗口的话,应该将Form1 的 IsMdiContainer属性设为True,然后建立一个Form2实例,并将该实例的MdiParent属性设为Form1的实例。如果要访问Form1的内容,比如,TextBox1.Text, 有两种方法<BR>1. 将TextBox1的Modifiers属性设为Public。<BR>2. 建立一个函数Public Function getTextBox1Text() As String, 然后在函数中访问并返回TextBox1.Text,然后在Form2中调用这个函数。<BR>无论如何一定要记住要访问实例的成员或函数,不能访问类的成员或函数,因为实例是真正储存在内存的信息。<BR><BR>一会上传一个例子文件</P>

javic 发表于 2007-11-20 13:10

例子

Visual Studio 2005 格式,如果打不开可以去看Form1.vb, Form2.vb 和 Form3.vb[attach]30570[/attach]<br>
[align=right][color=#000066][此贴子已经被作者于2007-11-20 13:10:48编辑过][/color][/align]


页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.