十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
兄弟我正在看比你上面提到版本更新的这本书 Visual Basic 2008 入门经典(第5版) 2005(第4版) 2003(第3版)
10年积累的成都做网站、网站设计、外贸营销网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有辽源免费网站建设让你可以放心的选择与我们合作。
内容基本差不多,就是改头换面换钞票,不过建议使用与软件的版本一至。
我用VB2008 书的版本不宜低于2005
另外:
这书是国外著名编程出版社出版的图书(Wrok),唯一遗憾的是代码里面的注释没有翻译,真是太缺德了(清华出版社 出版)
如果是初学者建议学国人编的书,推荐 《精通Visual Basic.NET中文版》网上到处都是免费下载 这本书写得很详细
public static String reverse1(String str)
{
return new StringBuffer(str).reverse().toString();
}
2.最常用的方法:
public static String reverse3(String s)
{
char[] array = s.toCharArray();
String reverse = ""; //注意这是空串,不是null
for (int i = array.length - 1; i = 0; i--)
reverse += array[i];
return reverse;
}
3.常用方法的变形:
public static String reverse2(String s)
{
int length = s.length();
String reverse = ""; //注意这是空串,不是null
for (int i = 0; i length; i++)
reverse = s.charAt(i) + reverse;//在字符串前面连接, 而非常见的后面
return reverse;
}
4.C语言中常用的方法:
public static String reverse5(String orig)
{
char[] s = orig.toCharArray();
int n = s.length - 1;
int halfLength = n / 2;
for (int i = 0; i = halfLength; i++) {
char temp = s[i];
s[i] = s[n - i];
s[n - i] = temp;
}
return new String(s); //知道 char数组和String相互转化
}
就可以了,我有一段不太成熟的代码:
Imports System.Net
Imports System.Net.Sockets
Imports System.Threading
Imports System.IO
Public Class Form1
Dim TCPListenerRun, TCPClientRun As Boolean
Dim ControlTCPClient, ServerClient As TcpClient
Dim ControlTCPListener As TcpListener
Dim TCPClientT, TCPListenerT As Thread
Private ControlStream, SControlStream As NetworkStream
Private ControlReadStream, SControlReadStream As StreamReader
Private ControlWriteStream, SControlWriteStream As StreamWriter
'异步委托
Private Delegate Sub InvokeDelegate(ByVal iMessage As String)
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
If TCPListenerRun Then
TCPListenerT.Abort()
ControlTCPListener.Stop()
TCPListenerRun = False
Button1.Text = "启动服务端 "
TextBox2.AppendText( "服务器已停止! " vbCrLf)
Else
ControlTCPListener = New TcpListener(IPAddress.Parse( "127.0.0.1 "), 13000)
ControlTCPListener.Start()
TCPListenerT = New Thread(AddressOf Listen)
TCPListenerT.Start()
TextBox2.AppendText( "等待连接... " vbCrLf)
TextBox2.AppendText( "服务器已启动! " vbCrLf)
TCPListenerRun = True
Button1.Text = "停止服务端 "
End If
Catch ex As Exception
TextBox2.AppendText(ex.Message vbCrLf)
End Try
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Try
If TCPClientRun Then
TCPClientT.Abort()
ControlTCPClient.Close()
TCPClientRun = False
Button2.Text = "启动客户端 "
Else
ControlTCPClient = New TcpClient(New IPEndPoint(IPAddress.Parse( "127.0.0.1 "), 13001))
ControlTCPClient.Connect(New IPEndPoint(IPAddress.Parse( "127.0.0.1 "), 13000))
TCPClientRun = True
Button2.Text = "停止客户端 "
TCPClientT = New Thread(AddressOf Receive)
TCPClientT.Start()
ControlStream = ControlTCPClient.GetStream()
ControlReadStream = New StreamReader(ControlStream)
ControlWriteStream = New StreamWriter(ControlStream)
End If
Catch ex As SocketException
'If ex.ErrorCode = 10048 Then
ControlTCPClient.Close()
'End If
TCPClientRun = False
Button2.Text = "启动客户端 "
TextBox2.AppendText(ex.Message vbCrLf)
End Try
End Sub
Private Sub Listen()
ServerClient = ControlTCPListener.AcceptTcpClient
TextBox2.BeginInvoke(New InvokeDelegate(AddressOf InvokeMethod_Receive), "成功连接... ")
SControlStream = ServerClient.GetStream()
SControlReadStream = New StreamReader(SControlStream)
SControlWriteStream = New StreamWriter(SControlStream)
While True
TextBox2.BeginInvoke(New InvokeDelegate(AddressOf InvokeMethod_Receive), SControlReadStream.ReadLine())
End While
End Sub
Private Sub Receive()
While True
TextBox2.BeginInvoke(New InvokeDelegate(AddressOf InvokeMethod_Receive), ControlReadStream.ReadLine())
'Console.WriteLine(ControlTCPClient.Available)
End While
End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
TCPListenerRun = False
TCPClientRun = False
End Sub
Private Sub InvokeMethod_Receive(ByVal iMessage As String)
TextBox2.AppendText(iMessage vbCrLf)
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
ControlWriteStream.WriteLine(TextBox1.Text)
ControlWriteStream.Flush()
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
SControlWriteStream.WriteLine(TextBox3.Text)
SControlWriteStream.Flush()
End Sub
End Class
使用FileStream读写文件
文件头:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
读文件核心代码:
byte[] byData = new byte[100];
char[] charData = new char[1000];
try
{
FileStream sFile = new FileStream("文件路径",FileMode.Open);
sFile.Seek(55, SeekOrigin.Begin);
sFile.Read(byData, 0, 100); //第一个参数是被传进来的字节数组,用以接受FileStream对象中的数据,第2个参数是字节数组中开始写入数据的位置,它通常是0,表示从数组的开端文件中向数组写数据,最后一个参数规定从文件读多少字符.
}
catch (IOException e)
{
Console.WriteLine("An IO exception has been thrown!");
Console.WriteLine(e.ToString());
Console.ReadLine();
return;
}
Decoder d = Encoding.UTF8.GetDecoder();
d.GetChars(byData, 0, byData.Length, charData, 0);
Console.WriteLine(charData);
Console.ReadLine();
写文件核心代码:
FileStream fs = new FileStream(文件路径,FileMode.Create);
//获得字节数组
byte [] data =new UTF8Encoding().GetBytes(String);
//开始写入
fs.Write(data,0,data.Length);
//清空缓冲区、关闭流
fs.Flush();
fs.Close();
2、使用StreamReader和StreamWriter
文件头:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
StreamReader读取文件:
StreamReader objReader = new StreamReader(文件路径);
string sLine="";
ArrayList LineList = new ArrayList();
while (sLine != null)
{
sLine = objReader.ReadLine();
if (sLine != null!sLine.Equals(""))
LineList.Add(sLine);
}
objReader.Close();
return LineList;
StreamWriter写文件:
FileStream fs = new FileStream(文件路径, FileMode.Create);
StreamWriter sw = new StreamWriter(fs);
//开始写入
sw.Write(String);
//清空缓冲区
sw.Flush();
//关闭流
sw.Close();
fs.Close();
===================================================================================
方式一:用FileStream
//实例化一个保存文件对话框
SaveFileDialog sf = new SaveFileDialog();
//设置文件保存类型
sf.Filter = "txt文件|*.txt|所有文件|*.*";
//如果用户没有输入扩展名,自动追加后缀
sf.AddExtension = true;
//设置标题
sf.Title = "写文件";
//如果用户点击了保存按钮
if(sf.ShowDialog()==DialogResult.OK)
{
//实例化一个文件流---与写入文件相关联
FileStream fs = new FileStream(sf.FileName,FileMode.Create);
//获得字节数组
byte [] data =new UTF8Encoding().GetBytes(this.textBox1.Text);
//开始写入
fs.Write(data,0,data.Length);
//清空缓冲区、关闭流
fs.Flush();
fs.Close();
}
方式二:用StreamWriter
//实例化一个保存文件对话框
SaveFileDialog sf = new SaveFileDialog();
//设置文件保存类型
sf.Filter = "txt文件|*.txt|所有文件|*.*";
//如果用户没有输入扩展名,自动追加后缀
sf.AddExtension = true;
//设置标题
sf.Title = "写文件";
//如果用户点击了保存按钮
if (sf.ShowDialog() == DialogResult.OK)
{
//实例化一个文件流---与写入文件相关联
FileStream fs = new FileStream(sf.FileName, FileMode.Create);
//实例化一个StreamWriter--与fs相关联
StreamWriter sw = new StreamWriter(fs);
//开始写入
sw.Write(this.textBox1.Text);
//清空缓冲区
sw.Flush();
//关闭流
sw.Close();
fs.Close();
}
string FileName = Guid.NewGuid().ToString() + ".txt"; //GUID生成唯一文件名
StringBuilder ckpw = new StringBuilder("\"凭证输出\", \"V800\", \"001\", \"东风随州专用汽车有限公司\"," + "\"F89自由项16\", \"F90审核日期:\"");
if (!FileIO.IsFolderExists(Server.MapPath("pzsc")))
FileIO.CreaterFolder(Server.MapPath(""), "");
string filePath = Server.MapPath("pzsc") + "\\" + FileName;
System.IO.StreamWriter sw = new System.IO.StreamWriter(filePath, false, Encoding.GetEncoding("GB2312"));//创建的时候需要指定编码格式,默认是UTF-8,中文显示乱码
sw.WriteLine(ckpw.ToString());
sw.Close();
方式三:用BinaryWriter
//实例化一个保存文件对话框
SaveFileDialog sf = new SaveFileDialog();
//设置文件保存类型
sf.Filter = "txt文件|*.txt|所有文件|*.*";
//如果用户没有输入扩展名,自动追加后缀
sf.AddExtension = true;
//设置标题
sf.Title = "写文件";
//如果用户点击了保存按钮
if (sf.ShowDialog() == DialogResult.OK)
{
//实例化一个文件流---与写入文件相关联
FileStream fs = new FileStream(sf.FileName, FileMode.Create);
//实例化BinaryWriter
BinaryWriter bw = new BinaryWriter(fs);
bw.Write(this.textBox1.Text);
//清空缓冲区
bw.Flush();
//关闭流
bw.Close();
fs.Close();
}
C#缓存流示例------用缓存流复制文件
C#文件处理操作必须先导入命名空间:using System.IO;
背景:使用VS2005、一个按钮、一个窗体、C#缓存流、把D:\KuGoo\爱得太多.wma复制到D:\并更名为love.wma,即:D:\love.wma
在按钮的Click事件中添加如下代码:
private void button1_Click(object sender, EventArgs e)
{
//创建两个文件流 一个是源文件相关,另一个是要写入的文件
FileStream fs = new FileStream(@"D:\KuGoo\爱得太多.wma",FileMode.Open);
FileStream fs2 = new FileStream(@"D:\love.wma",FileMode.Create);
//创建一个字节数组,作为两者之间的媒介
//好比两个人拿苹果,这个字节数组就好比一个篮子,一个人作死的把苹果送到篮子里面,
//而我就可以作死得拿苹果,通过这个媒介我们互不干扰,
//不需要互相等待【她往篮子里面放了苹果我才可以去拿】,提高了效率
byte[] data = new byte[1024];
//创建两个缓冲流,与两个文件流相关联
BufferedStream bs = new BufferedStream(fs);
BufferedStream bs2= new BufferedStream(fs2);
//fs作死的读,fs2作死的写,直到fs没有字节可读fs2就不写了
//好比,一个人作死的往篮子里面丢苹果,另一个人作死得往篮子里面拿苹果,直到篮子里面没有苹果拿了为止
//即--那个人没有苹果往篮子里面放了
while(fs.Read(data,0,data.Length)0)
{
fs2.Write(data,0,data.Length);
fs2.Flush();
}
//关闭流,好比两个人累了,都要休息 呵呵o(∩_∩)o...
fs.Close();
fs2.Close();
}
C#内存流示例-----用内存流来读取图片
C#文件处理操作必须先导入命名空间:using System.IO;
背景:一个窗体、一个pictureBox、一个lable[没有选择图片,lable的text为"图片未选择"],在pictureBox1的Click事件中添加如下代码:
private void pictureBox1_Click(object sender, EventArgs e)
{
//实例化一个打开文件对话框
OpenFileDialog op = new OpenFileDialog();
//设置文件的类型
op.Filter = "JPG图片|*.jpg|GIF图片|*.gif";
//如果用户点击了打开按钮、选择了正确的图片路径则进行如下操作:
if(op.ShowDialog()==DialogResult.OK)
{
//清空文本
this.label1.Text = "";
//实例化一个文件流
FileStream fs = new FileStream(op.FileName, FileMode.Open);
//把文件读取到字节数组
byte[] data = new byte[fs.Length];
fs.Read(data, 0, data.Length);
fs.Close();
//实例化一个内存流---把从文件流中读取的内容[字节数组]放到内存流中去
MemoryStream ms = new MemoryStream(data);
//设置图片框 pictureBox1中的图片
this.pictureBox1.Image = Image.FromStream(ms);
}
}
因为foreach是通过迭代来工作的,当你删除了一个元素后,这个集合内部元素之间的关系就会被破坏,所以你得不到正确的结果
你最好用for循环,或者先将要删除的控件放到一个数组中,foreach结束之后,统一删除,
顺序不对吧,先查询再打开数据库?
Dim myconn As New SqlConnection("Initial Catalog=school;Data Source=(Local);" "Integrated Security=SSPI;")
myconn.Open() '先打开数据库
Dim sql As String = "Select * From T_Student Where BookCode='" TextBox3.Text "'"
Dim mycmd As New SqlCommand(sql, myconn) '再查询
Dim myread As SqlDataReader