Visual Basic 和 SQL 图片框控件

Visual Basic & SQL Picturebox Controls

使用叠加在图像上的图片框,如下所示。 Click for Form Layout

如果学生参加 class,当表格加载时,图片框会变成绿色勾号。如果学生不参加 class 则图片框变为空白。

使用 SQL 我可以查询数据库以 return 特定学生参加的所有 classes。 这些 classes 存储在数组 StudentClass(n)

在数组 AttendsClass(n) 中存储了 50 个 class 时间表。全部具有默认值 False。 如果学生参加 class,则数组中的特定参加 class 变为 True。

加载表单后,用户可以单击图片框以 select 使 class 和数组中相应的 attendsclass 变为真。 最后,用户保存表单,将 classes 重新插入数据库。

我遇到的问题是在 Sub Form4_Load 最后,我目前必须重复相同的代码块 50 次。这只是检查学生是否参加 class,然后将图片框 = 设置为 GUI (_new.jpg) 上的勾号图像。

enter code here
If AttendsClass(1) = True Then
        PictureBox1.Image = My.Resources._new
    End If
    If AttendsClass(2) = True Then
        PictureBox2.Image = My.Resources._new
    End If
    If AttendsClass(3) = True Then
        PictureBox3.Image = My.Resources._new
    End If
    If AttendsClass(4) = True Then
        PictureBox4.Image = My.Resources._new
    End If

是否可以将其放入循环中以缩短我的代码。该代码确实有效,但速度缓慢且冗长,因此任何改进都会有所帮助。 非常感谢 Alex Currie A Level 计算学生 完整代码:

enter code here
Imports System.Data.OleDb
Public Class Form4
Public con As New OleDbConnection
Public ds As New DataSet
Public da As OleDbDataAdapter
Public cb As OleDbCommandBuilder
Public constring As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source    =" & Application.StartupPath & "\wma.accdb"
Public AttendsClass(50) As Boolean
Public StdID As Integer = Form2.DataGridView1.SelectedRows(0).Cells("StudentID").Value
Private Sub Form4_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim Forename As String = Form2.DataGridView1.SelectedRows(0).Cells("Forename").Value
    Dim Surname As String = Form2.DataGridView1.SelectedRows(0).Cells("Surname").Value
    Student.Text = "Student: " & Forename & " " & Surname
    If Not con.State = ConnectionState.Open Then
        con.ConnectionString = constring
        con.Open()
    End If
    da = New OleDbDataAdapter("SELECT * FROM StudentClass WHERE StudentId = " & StdID, con)
    da.Fill(ds, "Class")
    Dim Maxrow As Integer = ds.Tables("Class").Rows.Count
    Dim StudentClass(Maxrow) As Integer
    For n = 1 To 50
        AttendsClass(n) = False
    Next

    For n = 1 To Maxrow
        StudentClass(n) = ds.Tables("Class").Rows(n - 1).Item(1)
        For a = 0 To 50
            If StudentClass(n) = a Then
                AttendsClass(a) = True
            End If
        Next
    Next

    If AttendsClass(1) = True Then
        PictureBox1.Image = My.Resources._new
    End If
    If AttendsClass(2) = True Then
        PictureBox2.Image = My.Resources._new
    End If
    If AttendsClass(3) = True Then
        PictureBox3.Image = My.Resources._new
    End If
    If AttendsClass(4) = True Then
        PictureBox4.Image = My.Resources._new
    End If

End Sub

Private Sub PictureBox1_Click(sender As System.Object, e As System.EventArgs) Handles PictureBox1.Click
    If PictureBox1.Image Is Nothing Then
        PictureBox1.Image = My.Resources._new
        AttendsClass(1) = True
    Else
        PictureBox1.Image = Nothing
        AttendsClass(1) = False
    End If
End Sub

Private Sub PictureBox2_Click(sender As System.Object, e As System.EventArgs) Handles PictureBox2.Click
    If PictureBox2.Image Is Nothing Then
        PictureBox2.Image = My.Resources._new
        AttendsClass(2) = True
    Else
        PictureBox2.Image = Nothing
        AttendsClass(2) = False
    End If
End Sub

Private Sub PictureBox4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox4.Click
    If PictureBox4.Image Is Nothing Then
        PictureBox4.Image = My.Resources._new
        AttendsClass(4) = True
    Else
        PictureBox4.Image = Nothing
        AttendsClass(4) = False
    End If
End Sub

Private Sub PictureBox3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox3.Click
    If PictureBox3.Image Is Nothing Then
        PictureBox3.Image = My.Resources._new
        AttendsClass(3) = True
    Else
        PictureBox3.Image = Nothing
        AttendsClass(3) = False
    End If
End Sub

Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click
    If Not con.State = ConnectionState.Open Then
        con.ConnectionString = constring
        con.Open()
    End If
    Dim cmd As New OleDb.OleDbCommand
    cmd.Connection = con

    'Deletes Existing Records To Be rewritten'
    cmd.CommandText = "DELETE * FROM StudentClass WHERE StudentID=" & StdID
    cmd.ExecuteNonQuery()

    For n = 1 To 50
        If AttendsClass(n) = True Then
            cmd.CommandText = "INSERT INTO StudentClass (StudentID, ClassID) VALUES (" & StdID & "," & n & ")"
            cmd.ExecuteNonQuery()
        End If
    Next
    Me.Dispose()
    MsgBox("Updated Successfully", MsgBoxStyle.Information, "WMA")
    con.Close()
End Sub
End Class

工作示例:

Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
 Handles PictureBox1.Click, ...., PictureBox50.Click
    Dim pic As PictureBox = CType(Controls(CType(sender, PictureBox).Name), PictureBox)
    'now you have clicked picturebox
    'you can change image by pic.Image = ...
    'if you want picturebox index, use line below:
    Dim picidx As Integer = CInt(CType(sender, PictureBox).Name.Replace("PictureBox", ""))

End Sub

VB2010Ex.