2012-07-29 66 views
-2

我在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移动到右侧,不要使用绘图功能。 。

+0

我现在的问题是滚动事件和绘图事件中的addFrame中的标志如何使程序运行时让我画,当我将轨道条移动到右边例如不让我画。画我的意思是显示我已经做的画!显示/不显示。 – user1544479 2012-07-29 12:38:56

+0

请勿在评论中添加信息。编辑你的问题。 – 2012-07-29 12:55:56

+0

你让我们猜测WireObject是什么。 – LarsTech 2012-07-29 13:14:50

回答