Программа Screen Capture в VB.NET

58
4

Я создал приложение, которое отображает скриншот экрана рабочего стола. Он отлично работает с кнопкой, которую я использовал в форме. Но теперь я хочу, чтобы эта вещь работала автоматически с использованием таймеров, но всякий раз, когда я пытаюсь запустить программу NullReferenceException может кто-нибудь сказать мне, что здесь происходит не так.

TimerCapture interval=5

TimerSave interval=6

Вот код, который может рассказать вам сценарий:

Public Class Form1

Private Sub timerCapture_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles timerCapture.Tick
Dim bounds As Rectangle
Dim screenshot As System.Drawing.Bitmap
Dim graph As Graphics
bounds = Screen.PrimaryScreen.Bounds
screenshot = New System.Drawing.Bitmap(bounds.Width, bounds.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)
graph = Graphics.FromImage(screenshot)
graph.CopyFromScreen(bounds.X, bounds.Y, 0, 0, bounds.Size, CopyPixelOperation.SourceCopy)
PictureBox1.Image = screenshot
End Sub

Private Sub timerSave_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles timerSave.Tick
Me.PictureBox1.Image.Save("d:\\capture.bmp")

End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

' Me.WindowState = FormWindowState.Minimized

'Me.ShowInTaskbar = False

End Sub

Private Sub timerClose_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles timerClose.Tick
Me.Close()

End Sub

Private Sub capture_btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles capture_btn.Click
Dim bounds As Rectangle
Dim screenshot As System.Drawing.Bitmap
Dim graph As Graphics
bounds = Screen.PrimaryScreen.Bounds
screenshot = New System.Drawing.Bitmap(bounds.Width, bounds.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)
graph = Graphics.FromImage(screenshot)
graph.CopyFromScreen(bounds.X, bounds.Y, 0, 0, bounds.Size, CopyPixelOperation.SourceCopy)
PictureBox1.Image = screenshot
End Sub

Private Sub save_btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles save_btn.Click
Me.PictureBox1.Image.Save("d:\\capture.bmp")
End Sub
End Class

Заранее спасибо....

спросил(а) 2013-05-09T14:07:00+04:00 7 лет, 6 месяцев назад
1
Решение
59

Я думаю, что проблема заключается в timerSave_Tick, если по какой-то причине вы еще не оценили Me.PictureBox1.Image в timerCapture_Tick, это вызовет исключение NullReferenceException при попытке доступа к PictureBox1.Image.

Попробуйте изменить его таким образом:

Private Sub timerSave_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles timerSave.Tick
If(Me.PictureBox1.Image IsNot Nothing) Then
Me.PictureBox1.Image.Save("d:\\capture.bmp")
End If
End Sub

Во всяком случае, вы должны уметь отлаживать в Visual Studio, чтобы увидеть, где выбрано Exception.

ответил(а) 2013-05-09T16:59:00+04:00 7 лет, 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема