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

100分求解决方法?大家帮忙

2012-01-30 
100分求解决办法?大家帮忙我做一个简单的画线程序 因为特殊要求(网上阅卷)要把涂鸦保存下来 我把鼠标画线

100分求解决办法?大家帮忙
我做一个简单的画线程序 因为特殊要求(网上阅卷)要把涂鸦保存下来 我把鼠标画线经过的点都保存在SQL数据库里面 画线中间停顿时在数据库里插入一个(-1,-1);因为这样鼠标经过的点是以一个单位保存在数据库里面的,数据量太大 我想简化一下 但是又要保证把数据恢复出来时尽量的和原来所画线尽量的相似 大家有什么好的算法吗
我的一部分程序是这样的
private   void   MsMove(object   sender,System.Windows.Forms.MouseEventArgs      e)
{
 string   str= "server=127.0.0.1;Integrated      Security=SSPI;database=webdevelop ";
SqlConnection   conn=new   SqlConnection(str);

if(pen)
{    
  g.DrawLine(new   Pen(Color.Red),   oldX,   oldY,   e.X,   e.Y);
oldX   =   e.X;
oldY   =   e.Y;
p   =   new   Point(e.X,e.Y);
array.Add(p);
    string   sql= "INSERT   INTO   ZUOBIAO   (XX,YY)   VALUES   ( "+p.X+ ", "+p.Y+ ") ";
  SqlDataAdapter   adapter=new   SqlDataAdapter(sql,conn);
  DataSet   dataset=new   DataSet();
 adapter.Fill(dataset, "ZUOBIAO ");

}
private   void   MsDown(object   sender,   System.Windows.Forms.MouseEventArgs   e)
{    

if(pen)
{
string   str= "server=127.0.0.1;Integrated   Security=SSPI;database=webdevelop ";
SqlConnection   conn=new   SqlConnection(str);
SqlDataAdapter   adapter1=new   SqlDataAdapter( "INSERT   INTO   ZUOBIAO   (XX,YY)   VALUES   (-1,-1) ",conn);
DataSet   dataset1   =   new   DataSet();
conn.Open();

adapter1.Fill(dataset1,   "ZUOBIAO ");
conn.Close();
}

if(e.Button   ==   MouseButtons.Left)
{
isMoving   =   true;

}
Drag   =   true;        
oldX=e.X;
oldY=e.Y;
}
private   void   MsUp(object   sender,   System.Windows.Forms.MouseEventArgs   e)
{
Drag   =   false;
if(e.Button   ==   MouseButtons.Left)
isMoving   =   false;

而且我想填加一个右键菜单,在画过的线上右击 可以把这段线删除
大家有什么好的办法吗??
都来帮帮我吧

[解决办法]
mark

楼上是个办法,而且不用每次Move都新建连接吧。。

[解决办法]
或许将痕迹保存为jpg文件会容易些,载入时同时载入试卷和背景透明的文件就可以显示试卷和痕迹了。
[解决办法]
你把涂鸦所生成的Image或者bmp保存下来就可以了!
[解决办法]
我写了一个程序,楼主可以参考下,然后按自己的喜好改一下就可以了(VS2005):
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace drawImageApp
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private struct lineData
{
public Point startPoint;
public Point endPoint;
public lineData(Point start, Point end)
{
startPoint = start;
endPoint = end;
}
}
private List <lineData> list;
private Point lastPoint = Point.Empty;
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
this.list = new List <lineData> ();
//TODO:可以在这里从数据库中加载以前存储的数据以供显示
}
protected override void OnMouseDown(MouseEventArgs e)


{
lastPoint = new Point(e.X, e.Y);
base.OnMouseDown(e);
}
protected override void OnMouseMove(MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
Point curPoint = new Point(e.X, e.Y);
this.setLinePoint(lastPoint, curPoint);
this.drawLines(this.ClientRectangle);
this.lastPoint = curPoint;
}
base.OnMouseMove(e);
}

private void setLinePoint(Point lastPoint, Point curPoint)
{
lineData data = new lineData(lastPoint, curPoint);
this.list.Add(data);
}

private void drawLines(Rectangle rect)
{
if (this.Visible && !this.IsDisposed)
{
BufferedGraphicsContext myContext = BufferedGraphicsManager.Current;
BufferedGraphics buffer = myContext.Allocate(this.CreateGraphics(), rect);
if (buffer.Graphics != null)
{
this.drawList(buffer.Graphics, this.ClientRectangle);
}
buffer.Render();
buffer.Dispose();
}
}

private void drawList(Graphics g, Rectangle rect)
{
g.Clear(this.BackColor);
foreach (lineData data in this.list)
{
if (rect.Contains(data.startPoint) || rect.Contains(data.endPoint))
{
g.DrawLine(SystemPens.ControlText, data.startPoint, data.endPoint);
}
}
}

private void saveList()
{
try
{
string str = "server=127.0.0.1;Integrated Security=SSPI;database=webdevelop ";
SqlConnection conn = new SqlConnection(str);
StringBuilder sql = new StringBuilder();
if (this.list.Count > 0)
{
foreach (lineData data in this.list)
{
sql.Append(string.Format( "INSERT INTO ZUOBIAO (XX,YY) VALUES ({0},{1}); INSERT INTO ZUOBIAO (XX,YY) VALUES ({2},{3}) ",
data.startPoint.X, data.startPoint.Y, data.endPoint.X, data.endPoint.Y));
}

SqlCommand cmd = conn.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = sql.ToString();
int retValue = cmd.ExecuteNonQuery();
}
}
catch(Exception ex)
{
System.Console.WriteLine(ex.Message);
}
}
protected override void OnClosed(EventArgs e)
{
base.OnClosed(e);
this.saveList();
}
}
}
[解决办法]
我处理数据库时没有用conn.Open();楼主要加上.
[解决办法]
學習﹗﹗﹗

热点排行