Вопрос

I wanted to generate a random number between 1 and 20 for a game that I am creating and for some reason this code has stopped working and gives me a type mismatch error, I have tried other generators in the game but I get the same error.

Public Counter1 As Integer ' Counters for each reel
Public ArrayImgMid1 As Integer ' Store number to iterate over image arrays
Public ReelPic1 As Variant ' Array of images for each reel
Public Reel1Spin As Long ' Spins for each reel
Public ImgBeth, ImgWallow, ImgDan, ImgChris, ImgCatBug As StdPicture ' Images for reels

Private Sub CmdSpin_Click()

'Enable all timers to imitate spinning
TimerReel1.Enabled = True
TimerReel1.Interval = 100

' Disable spin button
CmdSpin.Enabled = False

' Set all counters to 0
Counter1 = 0

' Generate random number for the first reel to spin
Reel1Num = (CLng(Rnd * 20) + 1) ' This is highlighted when I press debug
Это было полезно?

Решение

Write it like this:

Dim Reel1Num As Long

Reel1Num = (CLng(Rnd * 20) + 1)

Don't use Integer in VB6 - it represents a 16-bit signed integer and it has slightly less performance than Long which is really a 32-bit signed integer. This way you also won't run into limits with the 16-bit data type.

The reason your code doesn't work is because the Int() function doesn't convert the data type of a value to type Integer - it rounds the specified value to an integer value but keeps its data type.

To convert a value to a particular data type, use the CInt(), CLng(), etc. functions. But as I said, avoid using Integer unless you specifically need it - Long is better in most cases.

Edit:

After you posted your code, I can't see a definition of the Reel1Num variable - where is it defined? Is it Reel1Spin? If that's the case, make sure you enable the Require variable declaration option in Tools->Options - it's off by default. If you don't have it on, it's a very easy way to shoot yourself in the foot.

Unrelated to your error, but most of your image objects are defined incorrectly - in VB6, the type of a variable must be specified for every variable, not once per line. So on this line:

Public ImgBeth, ImgWallow, ImgDan, ImgChris, ImgCatBug As StdPicture

you only really create 1 StdPicture object, all others will be variants. The right way to do it is:

Public ImgBeth As StdPicture, ImgWallow As StdPicture, ImgDan As StdPicture, _
    ImgChris As StdPicture, ImgCatBug As StdPicture

Aside from these, I can't see anything wrong with your code - I don't have VB6 installed on my computer. Keep in mind, that VB6 had a funky way of dealing with type mismatch and in some cases the highlighted line may not be the one that causes the actual error. This used to drive me crazy.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top