2016-12-15 68 views
0

这是我的源代码。当我按下按钮移动鼠标时,我似乎无法获得位图显示面板上绘制的线条。沮丧和寻找某人来帮助我完成代码,所以我可以完成我的9岁女儿的应用程序。预先感谢您...C#绘图程序不会在屏幕上创建任何线条,因为我试图使用位图绘制

namespace TV_PAINT 
{ 
    public partial class ALANA_PAINT : Form 
    { 
     Graphics g; 
     Pen p = new Pen(Color.Black, 7); 
     Point sp = new Point(0, 0); 
     Point ep = new Point(0, 0); 
     int m = 0; 
     Bitmap BP; 

     public ALANA_PAINT() 
     { 
      InitializeComponent(); 
      tb1.Text = p.Width.ToString(); 
      BP = new Bitmap(pnl1.ClientSize.Width, pnl1.ClientSize.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); 

     } 

     private void closeButton_Click(object sender, EventArgs e) 
     { 
      pnl1.Dispose(); 
      p.Dispose(); 
      this.Close(); 
     } 

     private void clearButton_Click(object sender, EventArgs e) 
     { 
      //pnl1.Invalidate(); 
      p.Color = System.Drawing.Color.Black; 
      p.Width = 7; 
      tb1.Text = p.Width.ToString(); 
      //pnl1.Invalidate(); 
     } 

     private void pnl1_MouseDown(object sender, MouseEventArgs e) 
     { 
      sp = e.Location; 
      if (e.Button == MouseButtons.Left) 
       m = 1; 
      if (e.Button == MouseButtons.Right) 
       m = 1; 
     } 

     private void pnl1_MouseMove(object sender, MouseEventArgs e) 
     { 
      if (m == 1) 
      { 
       ep = e.Location; 
       //g = pnl1.CreateGraphics(); 
       Graphics g = Graphics.FromImage(BP); 
       g.DrawLine(p, sp, ep); 
      } 
      sp = ep; 
     } 

     private void pnl1_MouseUp(object sender, MouseEventArgs e) 
     { 
      m = 0; 
     } 

回答

1

BP仅仅是形式的变量。正如我所看到的,它不会显示在表单中的任何位置。为什么你需要一个位图。 你可以做这样的事情,只是得到你的形式的图形,并使用该图形绘制。 https://msdn.microsoft.com/en-us/library/ztxk24yx(v=vs.110).aspx

注意到:你需要做它的形式的paintEvent,否则您的绘图将在未来重绘之后被去除,所以你需要一些变量来存储所有的线,然后绘制所有的人都在绘画事件。

System.Drawing.SolidBrush myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Red); 
System.Drawing.Graphics formGraphics; 
formGraphics = this.CreateGraphics(); 
formGraphics.FillRectangle(myBrush, new Rectangle(0, 0, 200, 300)); 
myBrush.Dispose(); 
formGraphics.Dispose(); 

更新时间: 如果您想保存更改为位图。您可以使用Form.DrawToBitmap将图形保存到位图中,然后将bitmap.Save()调用到目录中的文件中。

+0

谢谢你的回答。我试图制作一个绘图程序,当它从屏幕移出或其他东西放在它的顶部时,它不会清除面板。所以我被告知实现一个位图并绘制到位图而不是面板。我的下一个目标是能够将位图保存到一个文件,如果她想保存她制作的图片。希望这是有道理的... –

+0

如果是这样,我认为你可以做这样的事情http://stackoverflow.com/questions/26936109/how-do-i-save-a-winforms-panels-drawing-content-to -a-file –

+0

好的,再次感谢你。我正在阅读它... –