首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#画箭头程序,不知咋把图保存起来!解决方案

2013-02-17 
C#画箭头程序,不知咋把图保存起来!代码是酱紫!是直接画在窗体上的实现了鼠标Move过程中线一直存在!但是!Cl

C#画箭头程序,不知咋把图保存起来!
代码是酱紫!
是直接画在窗体上的
实现了鼠标Move过程中线一直存在!
但是!Clear命令导致之前画的所有线都没了!
我的想法是。。。能不能再MouseDown的时候,把之前画的存起来,画完再加载??求教啊~我是菜鸟!想用最简单的方法实现先。。。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace PAINTER
{
    public partial class Form1 : Form
    {
        private Image MyImg;
        int startX, startY;
        Graphics g;
        bool mouseDown = false;
       
         
        public Form1()
        {
            InitializeComponent();
            
        }

        private void radioButton1_CheckedChanged(object sender, EventArgs e)
        {

        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.MouseDown += new MouseEventHandler(Form1_MouseDown);
            this.MouseUp += new MouseEventHandler(Form1_MouseUp);
            this.MouseMove += new MouseEventHandler(Form1_MouseMove);
        }
        private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            mouseDown = true;
            startX = e.X;
            startY = e.Y;
            
        }
        private void Form1_MouseUp(object sender, MouseEventArgs e)
        {
            mouseDown = false;
            g = this.CreateGraphics();
            
            Pen p = new Pen(Color.Cyan,3);
            System.Drawing.Drawing2D.AdjustableArrowCap lineArrow =
                new System.Drawing.Drawing2D.AdjustableArrowCap(4, 4, true);
            p.CustomEndCap = lineArrow;


            g.DrawLine(p, startX, startY, e.X, e.Y);
        }
        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            if (mouseDown)
            {
                g = this.CreateGraphics();
                Form1_Paint(this, new PaintEventArgs(this.CreateGraphics(), this.ClientRectangle));
                g.DrawLine(new Pen(Color.Cyan, 1), startX, startY, e.X, e.Y);
            }

        }
        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = this.CreateGraphics();
            g.Clear(Color.White);
            
        }

    }
}



[解决办法]
画在内存bitmap中,Paint事件绘制在窗体上。

g.Clear(Color.White);
这样窗体被覆盖引发Paint,当然就没有了。
[解决办法]
先在Bitmap中画好,然后再绘在窗体上

热点排行