I have a form where the user can first scan to a bitmap. When scan is done, and the bitmap is loaded, I have 4 text boxes that are then enabled. Next to each text box, I have a button called "Cut from image". When the user clicks the button, they can click and drag in the bitmap to get the selected text using MODI.
This works perfect except for one annoying bug: When I click a "Cut from image" button and drag a square, it gets the information nicely to the text box. Then, if i click to the next text box, it goes very well, but if I use the tab key to leave the field, I get a "Parameter is not valid"
Protected Overrides Function ProcessTabKey(ByVal forward As Boolean) As Boolean
MsgBox("TAB is currently disabled!")
Return False 'Tried True as well, just in case
Dim filename As Collection
filename = TwainHandler.ScanImages("c:\scan\", "tif")
Dim ScannedFile As Image = Image.FromFile(filename(1))
PictureBox1.Image = ScannedFile
PictureBox1.Width = ScannedFile.Width
Your problem is likely that, at some point, you are calling the
Dispose method on one of your
Image objects. When you call
Image.Dispose, it deletes the underlying image data from memory, so the
Image object still exists, but is invalid because it no longer contains an actual image. When you set the
PictureBox.Image property to a loaded
Image object, the
PictureBox control assumes that the
Image object will remain valid so that it can reuse it later any time the control needs to repaint itself to the screen. For instance:
Dim myImage As Image = Image.FromFile("file path") PictureBox1.Image = myImage PictureBox1.Refresh() ' This works myImage.Dispose() PictureBox1.Refresh() ' This throws an exception because it tries to access the disposed Image object
PictureBox control will automatically dispose of the image for you when it is disposed, so you don't need to worry about disposing it yourself. The only time you should be disposing your images is when you are not giving them to any other objects for later use.