VB门外汉的总结

同学让我将一个C#程序改写为VB程序

程序是要解决这样的问题:类似MSN的邮件消息提示

因为是改写,所以没费多少时间就写的差不多了,于是就有时间对他进行一下总结

首先来说说程序的总体大概思路吧

程序是先需要用户输入用户名及密码,然后程序根据用户的输入在数据库表中查找没有阅读的邮件消息,并对其进行统计,最后显示在另一个逐渐上升滚动起来的窗体上,以提示用户有多少条消息

在原来的程序中是用了两个窗体和3个timer控件。窗体一是用于接收用户的输入以向查询语句提供查询关键字,窗体二是用于显示消息条数并达到不断上升的效果;而timer控件用于控制窗体二的上升。

对VB的语法以及一些对象的概念不清楚,让我对这个程序要解决的的问题有些迷惑。

VB中这样来声明变量:
Dim userName As string
如果你想初始化你所声明的变量,你可以这样做:
Dim userName As string = "KingThie"

那要定义一个静态变量,又该怎么办呢?
因为static关键字在Vb中非过程级用shared关键字代替了,也就是说仅可以在过程级使用 Static。这意味着可以用shared在过程或过程的块内(但不是在类或模块级)声明静态变量。如果指定了shared,也可以省略Dim 关键字。
如在C#中这样定义了一个类:
public class Systemvar
{
    public static int fWidth = 200;
    public static int fHight = 136;
}
那么在VB中,就转换为:
public class Systemvar
    Shared fWidth As Integer = 200
    Shared fHight As Integer = 136
end class

碰到了另一个问题是怎样实现多窗口显示。
其实这个问题以前在一些论坛上见到过,只不过当时没在意。
仿照C#中的代码,就在VB中写下了如下的语句:
Dim frm As Form2
frm.Show()
Me.Hide()
对于这样的语句,编译是可以通过的,但运行时出错了!思来想去,把老师在面向对象的课程讲的东西再仔细的回顾了一下,感觉没问题,我在使用frm对象前从类Form2中实例化了!想到这可能就是语言细节问题了,一查MSDN,才知道少了一个NEW关键字!于是把语句改为:
Dim frm As New Form2
frm.Show()
Me.Hide()

在这里用到了ME,这和c#中的this是一个意思。

为了让程序更合理,需要定义一些全局变量,可是一下子还找不到在哪里去声明这些变量,在网上一查(http://www.hlbrc.cn/cai/lmb/lmb/dispbbs.asp?boardid=17&rootid=3802&id=3802),哦,原来要在模块中来声明!

碰到另外的一些主要问题是VB中利用SQL语句对数据库操作的一些东西。

连接字符串是个问题。我只是新建了一个新项目然后按照IDE的WIZARD一步一步的连到数据库上,然后将生成的连接字符串COPY过来了,其他的操作和C#中的差不多。
程序中数据库操作的一些语句:
'连接字符串 
Dim connectString As String = "workstation id=KINGTHIE;packet size=4096;integrated        security=SSPI;data source=KINGTHIE;persist security info=False;initial catalog=MyDataBase"
Dim sql As String = "SELECT * FROM msg WHERE userStatus = 0 and userName = '" + strUserName + "'  and userPsd = '" + strUserPsd + "'"  '这几个字符串的连接要千万注意,要和SQL中的字符串一致
Dim conn As New System.Data.SqlClient.SqlConnection(connectString)

conn.Open()

Dim sqlCommand As New System.Data.SqlClient.SqlCommand(sql, conn)
Dim myReader As System.Data.SqlClient.SqlDataReader
myReader = sqlCommand.ExecuteReader()

While (myReader.Read())
    result = result + 1
End While

conn.Close()
注意,在VB中,还可以这样来连接字符串的:(即用&,而不只是用+)
LinkLabel1.Text = userName & ": 你有 " & result & " 条新消息!"

最后要说明的是,C#中用using 指令使用了系统的库,而在VB中是直接使用。
如:在C#中通常有如下语句:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Data.SqlClient;

而在VB中就没有了,要用到其中的类或对象时,是这样的:
Dim myReader As System.Data.SqlClient.SqlDataReader'DataReader的声明
e1 As System.Data.SqlClient.SqlException'异常消息对象的声明

【对程序的再思考】
在这个程序中,其实只要用循环就可以解决窗体的上升和下降的,没必要用3个timer控件!

另外,学习理论知识是非常重要的。在写程序过程中,总是想着平时看的那些理论,这样会很容易从原理上来考虑解决问题!

好了,主要碰到的问题就这些吧。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值