【IT168技术文档】用键盘控制picture移动
Public Class Form1
Private pic As PictureBox
Private center As New Point(10, 10)
Private r As Integer = 10
Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
Select Case e.KeyCode
Case Keys.Up
If center.Y > r Then center.Y -= 1 Else Return
Case Keys.Down
If center.Y < pic.Height - r Then center.Y += 1 Else Return
Case Keys.Left
If center.X > r Then center.X -= 1 Else Return
Case Keys.Right
If center.X < pic.Width - r Then center.X += 1 Else Return
Case Else
Return
End Select
pic.Refresh()
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
pic = New PictureBox With {.Dock = DockStyle.Fill, .BorderStyle = BorderStyle.FixedSingle}
AddHandler pic.Paint, AddressOf pic_Paint
Me.Controls.Add(pic)
End Sub
Private Sub pic_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs)
e.Graphics.Clear(Color.Black)
e.Graphics.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
e.Graphics.DrawEllipse(Pens.Red, New Rectangle(center.X - r, center.Y - r, r * 2, r * 2))
End Sub
End Class
C# code
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
private PictureBox pic;
private Point center = new Point(10, 10);
private int r = 10;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
pic = new PictureBox { Dock = DockStyle.Fill, BorderStyle = BorderStyle.FixedSingle };
pic.Paint += pic_Paint;
this.Controls.Add(pic);
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Up:
if (center.Y > r) center.Y -= 1; else return;
break;
case Keys.Down:
if (center.Y < pic.Height - r) center.Y += 1; else return;
break;
case Keys.Left:
if (center.X > r) center.X -= 1; else return;
break;
case Keys.Right:
if (center.X < pic.Width - r) center.X += 1; else return;
break;
default:
return;
}
pic.Refresh();
}
private void pic_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
e.Graphics.Clear(Color.Black);
e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
e.Graphics.DrawEllipse(Pens.Red, new Rectangle(center.X - r, center.Y - r, r * 2, r * 2));
}
}
}