想必你一定是用PictureBox1的graphics直接绘制的,不存在程序语句错误,问题在于绘制后TabPage切换时并没有被自动刷新,所以图形存在但不显示(按钮点击可以画出来相当于手工刷新了)
成都创新互联公司专注于大宁企业网站建设,自适应网站建设,电子商务商城网站建设。大宁网站建设公司,为大宁等地区提供建站服务。全流程按需网站开发,专业设计,全程项目跟踪,成都创新互联公司专业和态度为您提供的服务
你可以定义一个bitmap,在TabControl2_Selected函数中先用这个bitmap的graphics绘制图形,然后PictureBox1.Image=这个bitmap
你的图片名称可以用 1.jpg,2.jpg ...... n.jpg来命名,存放在一个文件夹下,文件夹放在应用程序安装包,或者运行的相对位置。代码就好写了
在事件外public int i;
在事件里面
if(ii)
{
i++; //累加顺序读取
pictureBox1.Image=Image.LoadFile(Application.StartUpPath + "/文件夹名/" + i.ToString() + ".jpg")
}
else
{
i=1; //初始化
}
这样就是按顺序读取图片。
当然折中办法很笨拙,因为图片名称写成数字很别扭,而且后缀也不完全一样,所以我们尽量用查询DB办法或者查找文件办法。数组是很慢的也很老土。把图片名称存在表里面,表里面查到哪个名称就加载那张图片就行了,简单了事,或者给图片在表里安排一列索引,用索引去查名称,加载出来就可以了。
在access数据库里将字段的类型设置为ole对象
Public img As Byte() '图片处理用的字节数组
img=My.Computer.FileSystem.ReadAllBytes(filePath)'filePath是你图片文件的路径
剩下的就是数据库插入操作了
Dim cn As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Data.mdb")
Dim comm As OleDb.OleDbCommand
comm = New OleDb.OleDbCommand( _
"INSERT INTO Photo(BuFan_F,PhotoNo,Photo) Values('" Me.CobBuFan.Text.Trim "','" Me.txtNo.Text.Trim "',@image)", cn)
'向数据库添加存储了图片数据的二进制数组
comm.Parameters.Add("@image", _
OleDb.OleDbType.Binary, img.Length).Value = img
If cn.State = ConnectionState.Closed Then cn.Open() '打开数据库连接
comm.ExecuteNonQuery() '执行数据库命令
If cn.State = ConnectionState.Open Then cn.Close() '关闭数据库连接
MessageBox.Show("图片成功保存到数据库", "完成", MessageBoxButtons.OK, MessageBoxIcon.Information)
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim MyStream As New System.IO.MemoryStream
Me.PictureBox1.Image.Save(MyStream, System.Drawing.Imaging.ImageFormat.Jpeg)
Dim MyBytes(MyStream.Length) As Byte
MyStream.Read(MyBytes, 0, MyStream.Length)
MyStream.Close()
Dim strText As String
strText = BitConverter.ToString(MyBytes)
Me.TextBox1.Text = strText
End Sub