如何使用标志绘制或不绘制pictureBox绘画事件?
我在Form1顶层有一个标志:addFrame在构造函数中设置为false。 然后在皮特事件中,我检查它是否让我画,如果它的真实也让我画。这里的问题是,我希望能够在第一次运行程序时进行绘制! 但是,当我将trackBar移动到右侧时,我不想让它画任何东西。如何使用标志绘制或不绘制pictureBox绘画事件?
private void pictureBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
Graphics g = e.Graphics;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
moveCounter++;
label6.Text = moveCounter.ToString();
if (addFrame == false)
{
WireObjectGraphics.Draw(wireObject1, g);
}
else
{
addFrame = false;
WireObjectGraphics.Draw(wireObject1, g);
}
}
这是按钮点击事件,其中IM点击设置ADDFRAME为true:
private void button16_Click(object sender, EventArgs e)
{
wireObjectAnimation1.AddFrame();
addFrame = true;
trackBar1.Select();
}
而且在这种情况下,我想使滚动条事件,如果我的跟踪条移到没有任何绘画,然后只是在pictureBox中显示图像不要画任何东西!但是如果我把它移到右边,并且已经有绘制,那么就显示它们。
如果我将它移动到左侧,则显示以前的平局。
private void trackBar1_Scroll(object sender, EventArgs e)
{
if (addFrame == false)
{
}
else
{
currentFrameIndex = trackBar1.Value - 1;
textBox1.Text = "Frame Number : " + trackBar1.Value;
wireObject1.woc.Set(wireObjectAnimation1.GetFrame(currentFrameIndex));
trackBar1.Minimum = 0;
trackBar1.Maximum = fi.Length - 1;
if (checkBox1.Checked)
{
setpicture(trackBar1.Value);
Graphics g = Graphics.FromImage(pictureBox1.Image);
g.Clear(SystemColors.Control);
pictureBox1.Invalidate();
}
else
{
setpicture(trackBar1.Value);
}
pictureBox1.Refresh();
button1.Enabled = false;
button2.Enabled = false;
button3.Enabled = false;
button4.Enabled = false;
button8.Enabled = false;
SaveFormPicutreBoxToBitMapIncludingDrawings(currentFrameIndex);
return;
}
}
这是WireObjectGraphics类绘制函数:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
namespace AnimationEditor
{
class WireObjectGraphics
{
static Point connectionPointStart;
static Point connectionPointEnd;
static SolidBrush brush;
static Pen p = null;
public WireObjectGraphics()
{
}
public static void Draw(WireObject wo, Graphics graphics)
{
brush = new SolidBrush(Color.Red);
p = new Pen(brush);
Graphics g = graphics;
WireObject wireObject1 = wo;
if (wireObject1 != null)
{
for (int idx = 0; idx < wireObject1.woc.Point_X.Count; ++idx)
{
Point dPoint = new Point((int)wireObject1.woc.Point_X[idx], (int)wireObject1.woc.Point_Y[idx]);
dPoint.X = dPoint.X - 5; // was - 2
dPoint.Y = dPoint.Y - 5; // was - 2
Rectangle rect = new Rectangle(dPoint, new Size(10, 10));
g.FillEllipse(brush, rect);
// bitmapGraphics.FillEllipse(brush, rect);
// g.FillEllipse(brush, rect);
}
for (int i = 0; i < wireObject1._connectionstart.Count; i++)
{
int startIndex = wireObject1._connectionstart[i];
int endIndex = wireObject1._connectionend[i];
connectionPointStart = new Point((int)wireObject1.woc.Point_X[startIndex], (int)wireObject1.woc.Point_Y[startIndex]);
connectionPointEnd = new Point((int)wireObject1.woc.Point_X[endIndex], (int)wireObject1.woc.Point_Y[endIndex]);
p.Width = 2;
g.DrawLine(p, connectionPointStart, connectionPointEnd);
// bitmapGraphics.DrawLine(p, connectionPointStart, connectionPointEnd);
}
}
}
}
}
我需要的是,第一次运行该程序能够得出! 然后当移动trackBar到右检查绘制是否已经存在显示他们,如果不存在只显示图像,只有当我点击按钮,它会添加画框上的画。
如果我移到左边,allways会显示我在其他帧中所做的绘制。
WireObject类:
构造:
class WireObject
{
private string an;
private bool fnExt;
public string lockObject;
private int idx;
public WireObjectCoordinates woc;
private List<int> connectionStart = new List<int>();
private List<int> connectionEnd = new List<int>();
private const string version = "01.00";
string wo_name;
public WireObject(string name)
{
wo_name = name;
woc = new WireObjectCoordinates();
fnExt = false;
}
在wireobject类我有一个连接点(像素),如删除像素一样保存和加载一些功能...
WireObjectCoordinates类是:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace AnimationEditor
{
class WireObjectCoordinates
{
public List<float> Point_X = new List<float>();
public List<float> Point_Y = new List<float>();
public WireObjectCoordinates()
{
}
public WireObjectCoordinates(WireObjectCoordinates w)
{
Point_X.AddRange(w.Point_X);
Point_Y.AddRange(w.Point_Y);
}
public void Set(WireObjectCoordinates w)
{
if (w == null)
{
}
else
{
for (int i = 0; i < Point_X.Count; i++)
{
Point_X[i] = w.Point_X[i];
Point_Y[i] = w.Point_Y[i];
}
}
}
}
}
问题依然存在m1与标志何时显示像素的意思何时以及如何调用paintBox1.Refresh();但是一旦使用内部的Draw函数,一旦它不会。当我运行程序时,让我使用绘图功能,一旦我将trackBar移动到右侧,不要使用绘图功能。 。
Windows窗体控件的OnPaint时)的窗口重叠的电流控制被移出的方式或B只能调用)手动无效控制:http://msdn.microsoft.com/en-us/library/1e430ef4.aspx
所以OnPaint中应该得到所谓的太频繁。
我现在的问题是滚动事件和绘图事件中的addFrame中的标志如何使程序运行时让我画,当我将轨道条移动到右边例如不让我画。画我的意思是显示我已经做的画!显示/不显示。 – user1544479 2012-07-29 12:38:56
请勿在评论中添加信息。编辑你的问题。 – 2012-07-29 12:55:56
你让我们猜测WireObject是什么。 – LarsTech 2012-07-29 13:14:50