Hi guys,
I am trying to make a small application for the company I work for.
The application has to be able to make a floor plan for a casino.
The casino has to create the map of where all the slot machines are located and if you double click on a certain machine pull some info for it.
So I put a picturebox and divide it in a lot of cells and create a class named CellValue and create and array of object Cell value.
The Cellvalue has some variables cellcolor, cellname, cellshape and cell Location x and y.
My issue now is that I need to save the array so I can re draw and save the map made. and tried several methods to save it using XML serialization but it doesn't do nothing :(
If I do get the array to save how can I access items in the array from outside the method? that doesn't seem to be working as well.
here is the code I have up to now
Imports System
Imports System.Collections
Imports System.Xml
Imports System.Array
Imports System.Data
Imports System.IO
Public Class Form1
Dim SizeW As Integer = 30
Dim SizeH As Integer = 30
Dim Plan(SizeW - 1, SizeH - 1) As CellValue
'array created of objects from class CellValue
Dim Command As Integer = -1
'Set to -1 if none of the buttons are clicked, can give a function/sub code for this
Dim RND As New Random
'To randomize the colors if needed
Public LocXY As String = ""
Public mcid As String = ""
Private Sub btnClear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClear.Click
Command = 0
'This will execute command 0 code below
End Sub
Public Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click
Command = 1
'This will execute command 1 below
End Sub
Private Sub btnstrdata_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnstrdata.Click
Command = 2
'This will execute command 2 code below
'will be to serialize map to xml
End Sub
Public Function PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
Dim CellW As Integer = PictureBox1.Width \ SizeW
Dim CellH As Integer = PictureBox1.Height \ SizeH
'Divides the picture box size into cells p.e size =200 and there is 20 array obj each cell is 10px
Dim P As Point = PointToClient(MousePosition)
Dim X As Integer = (P.X - PictureBox1.Left) \ CellW
Dim Y As Integer = (P.Y - PictureBox1.Top) \ CellH
'Determining which cell is clicked
Label1.Text = X.ToString & " " & Y.ToString
'Label5.Text = Plan(X, Y).CellName
If Command <> -1 Then
If Plan(X, Y) Is Nothing Then Plan(X, Y) = New CellValue
Select Case Command
Case 0 : Plan(X, Y).CellShape = 0
Label5.Text = Plan(X, Y).CellName
'Array.Clear(Plan(X, Y)) 'doesn't work
'Try to clear one element in the whole array when the clear button is selected
'No cell shape nor color, if there is something it will be cleared
Case 1
Plan(X, Y) = New CellValue
'will show an inputbox so it prompts user to add machineID
mcid = InputBox("Enter MachineID", "MachineID")
Plan(X, Y).CellName = mcid
Plan(X, Y).CellLocX = X
Plan(X, Y).CellLocY = Y
Plan(X, Y).CellColor = Color.Black
If chbxnigt.Checked Then
Plan(X, Y).CellShape = Shape.Circle
'if the button is pressed then shape will be a circle
Else : Plan(X, Y).CellShape = Shape.Square
End If
Label5.Text = Plan(X, Y).CellName
'Checks if checkbox is selected will put a circle else a square as SHAPE!
'Case 2: eventually will save/update the array to xml
Case 2
MessageBox.Show("MachineID is " & Plan(X, Y).CellName & " X-Location is " & Plan(X, Y).CellLocX & " Y-Location is " & Plan(X, Y).CellLocY)
Label5.Text = Plan(X, Y).CellName
End Select
PictureBox1.Invalidate()
'this is so that the picturebox can be redrawn everytime.
Command = -1 'One click only per selection
End If
Return LocXY = Label1.Text
End Function
Public Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
Dim W As Integer = PictureBox1.Width
Dim H As Integer = PictureBox1.Height
Dim CellW As Integer = W \ SizeW
Dim CellH As Integer = H \ SizeH
Dim P As Pen = New Pen(Color.Gray, 1)
For I As Integer = 0 To W Step CellW
e.Graphics.DrawLine(P, I, 0, I, H)
Next
For I As Integer = 0 To H Step CellH
e.Graphics.DrawLine(P, 0, I, W, I)
Next
For i As Integer = 0 To SizeW - 1
For j As Integer = 0 To SizeH - 1
If Not Plan(i, j) Is Nothing Then
fillcell(e.Graphics, i, j, Plan(i, j).CellColor, Plan(i, j).CellShape)
End If
Next
Next
End Sub
Private Sub fillcell(ByVal g As Graphics, ByVal I As Integer, ByVal j As Integer, ByVal C As Color, ByVal S As Shape)
Dim CellW As Integer = PictureBox1.Width \ SizeW
Dim CellH As Integer = PictureBox1.Height \ SizeH
Dim x As Integer = I * CellW
Dim y As Integer = j * CellH
Select Case S
Case Shape.Blank ' Do Nothing
Label5.Text = ""
Case Shape.Square
g.FillRectangle(New SolidBrush(C), New Rectangle(x, y, CellW, CellH))
Case Shape.Circle
g.FillEllipse(New SolidBrush(C), New Rectangle(x, y, CellW, CellH))
End Select
End Sub
End Class
Friend Class CellValue
Public CellColor As Color = Color.White
Public CellShape As Shape = Shape.Blank
Public CellName As String = ""
Public CellLocX As String = ""
Public CellLocY As String = ""
End Class
Friend Enum Shape
Blank
Square
Circle
End Enum
Will be thankfull for any comments you might have