我想在c#中做一個小畫圖程序。到目前爲止,一切工作正常,只有當我將鼠標移動得足夠快時,纔會出現間隙,應該有一條實線。我已經嘗試了一切從雙緩衝到減少mouse_move事件的間隔(我實際上沒有找到任何方法來做到這一點,我認爲這也會對系統上的其他進程不利)^^在c#中繪製空白
你能在這裏指出我正確的方向?我試圖覆蓋面板的繪畫方法,但是當我嘗試這個似乎沒有發生。
下面的代碼:
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 Paint
{
public partial class Form1 : Form
{
bool paint;
SolidBrush color;
//size of brush
int pinselGröße;
List<Point> pointListe;
public Form1()
{
InitializeComponent();
pointListe = new List<Point>();
paint = false;
color = new SolidBrush (Color.Black);
//get brush size from combobox
pinselGröße = Convert.ToInt32 (nudBrushSize.Value);
}
private void btnExit_Click (object sender, EventArgs e)
{
this.Close();
}
private void btnClear_Click (object sender, EventArgs e)
{
Graphics gfx = pnlCanvas.CreateGraphics();
gfx.Clear (pnlCanvas.BackColor);
}
private void pnlCanvas_MouseDown (object sender, MouseEventArgs e)
{
paint = true;
Graphics grfx = pnlCanvas.CreateGraphics();
//draw a rectangle with brush "color" and pinselGröße as the brush size
grfx.FillRectangle (color, e.X, e.Y, pinselGröße, pinselGröße);
}
private void pnlCanvas_MouseMove (object sender, MouseEventArgs e)
{
if (paint)
{
//Graphics grfx = pnlCanvas.CreateGraphics();
////put old position of mouse into variable
//int altePosX = e.X;
//int altePosY = e.Y;
////grfx.FillEllipse (color, e.X, e.Y, pinselGröße, pinselGröße);
//grfx.FillRectangle(color, e.X, e.Y, pinselGröße, pinselGröße);
//grfx.Dispose();
pointListe.Add(e.Location);
pnlCanvas.Invalidate();
}
}
private void pnlCanvas_Paint(PaintEventArgs e)
{
e.Graphics.DrawLines(new Pen(color), pointListe.ToArray());
}
private void pnlCanvas_MouseUp (object sender, MouseEventArgs e)
{
paint = false;
}
private void nudBrushSize_ValueChanged (object sender, EventArgs e)
//when value of combobox changes, read value into brush size variable
pinselGröße = Convert.ToInt32 (nudBrushSize.Value);
}
private void cmbColor_SelectedIndexChanged (object sender, EventArgs e)
{
int index = cmbColor.SelectedIndex;
color.Dispose();
switch (index)
{
case 0:
{
color = new SolidBrush (Color.Black);
break;
}
case 1:
{
Console.WriteLine ("Geht");
color = new SolidBrush (Color.Red);
break;
}
case 2:
{
color = new SolidBrush (Color.Blue);
break;
}
case 3:
{
color = new SolidBrush (Color.Green);
break;
}
}
}
}
}
當我做這種方式:
private void pnlCanvas_MouseMove (object sender, MouseEventArgs e)
{
if (paint)
{
Graphics grfx = pnlCanvas.CreateGraphics();
////put old position of mouse into variable
int altePosX = e.X;
int altePosY = e.Y;
//grfx.FillEllipse (color, e.X, e.Y, pinselGröße, pinselGröße);
grfx.FillRectangle(color, e.X, e.Y, pinselGröße, pinselGröße);
grfx.Dispose();
//pointListe.Add(e.Location);
//pnlCanvas.Invalidate();
}
}
//private void pnlCanvas_Paint(PaintEventArgs e)
//{
// Console.Write("mjsda2");
// e.Graphics.DrawLines(new Pen(color), pointListe.ToArray());
//}
我得到這個:
給予我們不要用英文寫的,你減少量代碼的人會盡力幫助你。 – Snowbear
好的,對不起,我添加了一些理解意見。 – LeonidasFett