100分求教:两个最基础的问题

kandyd 2006-08-24 08:25:38
以前一直用的都是VB6,现在新学VB.net,刚好手边有个程序量不大而且交货期限还有段时间的程序,所以准备边学边用。但一上来遇到了两个问题,如下:
问题一、窗体的显示与隐藏:(此问题30分,只给第一个解决问题的朋友)
测试环境:两个窗体(Form1和Form2),在Form1上有一个按钮btnShowForm2(点击隐藏Form1并显示Form2),在Form2上有一个按钮btnShowForm1(点击隐藏Form2并显示Form1)。
1、在VB6中,这个实现很简单,在Form1的事件中使用两条语句
Form2.show
me.hide
就完成了,在Form2的的代码也一样,只是改了窗体名而已。
2、在vb.net中,我试着用以下代码,但不行,会打开多个实例,代码如下(以Form1代码为例):
Dim f2 as New Form2
f2.Show()
me.Hide()
如果这样的话在两个窗体点来点去最后关掉窗体时发现程序还在运行,在去掉me.hide()后可以看到出现一大堆窗体。
现在在vb.net中要求实现同样的功能应该如何编写?
问题二、使用DataSet更新数据库的问题(此问题70分,只给第一个解决问题朋友)
问题是这样的:我创建了一个窗体,同时使用SQL创建好了数据连接(sqlCnn)/数据适配器(sqlAda)/和数据集(myDataSet)。在窗体上有两个按钮,一个是“载入数据”,一个是“更新数据”,还有几个文本框用于显示和修改数据。现在问题出来了,点击“载入数据”进行查看一切正常,但更改了其中的一个文本框的内容后点击“更新数据”却没有修改(进入数据库管理界面看到的),但如果使用DataGrid控件却能更改。“更新数据”按钮的代码如下:
myDataSet.AcceptChanges()
SqlAda.Update(myDataSet)
第一行在使用DataGrid控件时可有可无,没有一样可能更改,但使用文本框代替DataGrid控件后就无法更新了。
请问如何解决?
两个问题的答案要求详细并有相应代码(或就我上面的代码改,只要OK就行了)。
...全文
335 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
kandyd 2006-08-29
  • 打赏
  • 举报
回复
唉,好在早就解决了,怎么没人回呢?
是不是嫌分少?还是高手不肯回答这些问题?
结贴了~~~~~~~~~~~
xsm_1314 2006-08-25
  • 打赏
  • 举报
回复
正好现在也在用vb.net开发,近来学习学习!~
Anderson009 2006-08-25
  • 打赏
  • 举报
回复
偶是新手,穷乡僻壤,来蹭点分,谢谢
接分~~^_^~~
kandyd 2006-08-25
  • 打赏
  • 举报
回复
第2个问题已解决,以下是我的代码,希望有人能提供更好的方式,因为这样改要定位记录位置(缺点)。
1、原来的代码(不能更新数据源):
myDataSet.AcceptChanges()
SqlAda.Update(myDataSet)

2、现在的代码(可以更新数据源):
myDataSet.表名(记录号).BeginEdit()
myDataSet.表名(记录号).字段名=值
myDataSet.表名(记录号).EndEdit()
SqlAda.Update(myDataSet)

原因:更改数据记录内容要放在开始编辑和结束编辑两个方法之间,否则数据集的数据是变了,但是是否修改标志一直为FALSE(使用SPY++可以查看),调用数据适配器的UPDATE方法时系统认为没有要更新的数据导致没有更新。

谁有更好的方法请贴出来,谢谢!
(此贴3天后结贴)
kandyd 2006-08-24
  • 打赏
  • 举报
回复
还感谢wxwinter的回复,不过我只是刚从VS6转过来,对于.net是一个完全的新手(呵呵,在今天之前一直用的是VS6,VS.net还是今天才安装的),对于改变比较大的VB不是很熟悉,其实我主要使用的语言并不是VB而是VC,之前我写程序时一般是用VB来做界面(因为方便快速而且可以做得更漂亮),而底层功能一般是用VC完成的。如果还要回到VB6做界面那就没什么意义了,所以想多了解一下VB.net(包括所有新增的功能)。一般我学一种新语言时都是用完成一个软件的制作来熟悉这个语言,这样既掌握了语言,也完成了软件。现在手上的这个开发任务刚好可以练习一下VB.net。
你的建议非常好,也很感谢你真诚的回应,真的,谢谢你!!!
kandyd 2006-08-24
  • 打赏
  • 举报
回复
感谢大家,第一个问题已经解决,非常感谢coolstarhty,你的方法是正确的,但是要定义两个public变量,这样对系统安全性就有了问题。刚才在通过参考VC++文档的方法修改窗体的构造函数已解决了这个问题,并附带解决了窗体参数传递的问题。分在结贴会奉上。谢谢了。
至于第二个问题现在测试中,呵呵,其实自己可以用SQL语句完成的,但这样去做有点对不起M$提供的控件(有点懒,不想写太多代码),只是想了解在控件操作方式下应该如何实现而已,分照送,但问题一定要详细并能解决。
wxwinter 2006-08-24
  • 打赏
  • 举报
回复
看在你以前写VB的份上,没分我也说

//////////////////////////////////////////////////////////////////
窗体.Hide '只是隐藏,窗体还没卸载,可以使用Show方法将其显示
窗体.Close '将窗体关闭,关闭在该对象内创建的所有资源
窗体=nothing '将对象清空,当类被设为nothing时, CLR不会去释放这些资源
窗体.Finalize '析构,析构由GC自动调用。不能,也不应手动调用
窗体.Dispose 'Dispose应手动调用,调用Dispose后对象不自动消毁,如要实现自动消毁应在Dispose方法中加入代码,一般GC无法释放的资源在这里手工释放
Application.Exit '以前VB的 END
////////////////////////////////////////////////////////////////

如果这些不弄通,只去学些功能类的事件,方法,属性,不可能成为大家
还有新建一个工程,添加个按钮,文本框,写个事件,然后将系统自动生成的代码一行一行看懂,再试着用记事本写出一个窗体的代码。这样对你的帮助很大。
coolstarhty 2006-08-24
  • 打赏
  • 举报
回复
在项目属性里将“启动对象”设为“Sub Main”,重新编译。
---------------------------------
请核对这步是否对。
因为第一次答错了,所以现在我是测试过才给你贴出代码,绝对不会出现3个窗口。
coolstarhty 2006-08-24
  • 打赏
  • 举报
回复
楼上的,我不知道你怎样写的,反正我的就算不隐藏也只有两个窗体
kandyd 2006-08-24
  • 打赏
  • 举报
回复
重新编译已经编译过了,这个在VS6中就有,你试一下看看,去掉visible=false后是不是三个窗体?
还有感谢愚公公公提供的好文章,已拜读。但我的问题是两个窗体都不能关的,只能隐藏一个显示一个(客户的指定要求不能违背),当Form1隐藏的时候,在Form2输入时还要用到在Form1上客户输入的数据并进行比对的,反之亦然,但又不允许同时将两个窗体都显示出来(这是前提,如果不是这样的要求我会干脆将两个窗体都显示出来或用标签切换了)。
在VB6中实现是非常容易的,难道还是非得要我用VB6去做?正想着终于有机会和时间改语言了呢,郁闷!!!
coolstarhty 2006-08-24
  • 打赏
  • 举报
回复
在项目属性里将“启动对象”设为“Sub Main”,重新编译。
kandyd 2006-08-24
  • 打赏
  • 举报
回复
感谢coolstarhty朋友,试了一下,问题基本解决,但还是有个问题不知道你试过没有,将visible=false注释掉后你会发现有两个Form1(现在就剩下3个窗口,比原来好了很多,但还没达到预期的效果)。将sub main中的application.run(frm1)换为frm1.ShowDialog()结果也是一样,问题在哪呢?因为我只要2个窗口,不需要第三个。
Knight94 2006-08-24
  • 打赏
  • 举报
回复
首先你在vb中的方式就不对,希望你在vb.net的时候不要延用
参看这篇文章,或许对你有用
http://blog.csdn.net/Knight94/archive/2006/08/22/1104957.aspx
coolstarhty 2006-08-24
  • 打赏
  • 举报
回复
第一题:

先添加一个模块:

Module Main
Public frm1 As New Form1
Public frm2 As New Form2
Sub main()
Application.Run(frm1)
End Sub
End Module

form1里面:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
frm2.Visible = True
Me.Visible = False
End Sub

form2里面:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
frm1.Visible = True
Me.Visible = False
End Sub
我是丁学 2006-08-24
  • 打赏
  • 举报
回复
看下我的昵称和楼主的一样不一样
coolstarhty 2006-08-24
  • 打赏
  • 举报
回复
第二个问题:

你使用DATAGRID可以是因为,你编辑DATAGRID时,程序会自动将你的改动设置到myDataSet;

而使用textbox,需要你写代码将改动设置到myDataSet,然后更新才有效
kandyd 2006-08-24
  • 打赏
  • 举报
回复
呵呵,close是close了,只是Form2也不显示就退出程序了
coolstarhty 2006-08-24
  • 打赏
  • 举报
回复
第一题:

Dim f2 as New Form2
f2.Show()
me.close()

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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