2016-12-15 4 views
0

ここに私のソースコードがあります。私はボタンを押したままマウスを動かすと、パネル上に描画された線を表示するビットマップを取得できないようです。私の9歳の娘のためにアプリを完成させるためにコードを完成させるために挫折して誰かを探しています。事前にありがとうございます...ビットマップを使用して描画しようとすると、C#paintプログラムは画面上に線を作成しません。

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

もう一度ありがとうございます。私は今それを読んでいる... –

関連する問題