2012-07-29 71 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

回答