gub*_*ett 4 vb.net modi bitmap keypress winforms
我有一个表单,用户可以先扫描到位图.扫描完成后,加载位图,我有4个文本框然后启用.在每个文本框旁边,我有一个名为"从图像剪切"的按钮.当用户单击该按钮时,他们可以单击并拖动位图以使用MODI获取所选文本.
除了一个令人讨厌的bug之外,这种方法很完美:当我点击"从图像剪切"按钮并拖动一个正方形时,它会很好地获取文本框中的信息.然后,如果我点击下一个文本框,它会很顺利,但是如果我使用tab键离开该字段,我会得到一个"参数无效" ArgumentException并且它没有显示任何帮助代码中的位置崩溃了.我可以在表单中四处选择,没有任何问题,但是一旦扫描了位图,当我使用tab键时,它会像10次中的9次一样崩溃.
我尝试使用以下方法覆盖tab键(仅用于调试):
Protected Overrides Function ProcessTabKey(ByVal forward As Boolean) As Boolean
MsgBox("TAB is currently disabled!")
Return False 'Tried True as well, just in case
End Function
Run Code Online (Sandbox Code Playgroud)
......但它仍然崩溃.
关于什么是错的任何建议?由于我不知道从哪里开始调试,我无法分辨出要显示的代码.
编辑1
这是ArgumentException抛出的堆栈跟踪:
编辑2
以下是我扫描/加载图片的方法:
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
' etc.
Run Code Online (Sandbox Code Playgroud)
Ste*_*art 11
您的问题很可能是,您Dispose在某个Image对象上调用该方法.当您调用时Image.Dispose,它会从内存中删除基础图像数据,因此该Image对象仍然存在,但由于它不再包含实际图像而无效.当您将PictureBox.Image属性设置为已加载的Image对象时,该PictureBox控件将假定该Image对象将保持有效,以便在控件需要将其自身重新绘制到屏幕时,它可以在以后重用它.例如:
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
Run Code Online (Sandbox Code Playgroud)
将PictureBox其设置在控制将自动为您处理的图像,所以您不必担心自己处置它.您应该处理图像的唯一时间是您不将它们提供给任何其他对象以供以后使用.
| 归档时间: |
|
| 查看次数: |
10295 次 |
| 最近记录: |