2016-11-30 4 views
1

私は個人的なプロジェクトを進めています。新しいポップアップフォームにクライアントが "署名"を描くようにする必要があります。 on-mouse over)イベントが発生します。C#ユーザーがマウス/スクリーンのクリックでwinformを描画できるようにする

このシグネチャは、データベースのvarbinary(max)フィールドに保存するためにイメージオブジェクトに格納する必要があります。

グーグルが動き出していない、これがどのように達成できるのか?私は私のタッチスクリーンのラップトップでチェック

+1

この記事をご覧ください:https://www.codeproject.com/articles/17895/handling-touch-pen-or-mouse-digitizer-input-in-you –

+0

コメントありがとうございます@AbdelRaoofその特定の投稿のダウンロード可能なファイルをVS2015で開くことはできないようです。また、このコードはスタイラスで使用されるようです。しかし、システムを使用しようとしているコンピュータはスタイラスを持っておらず、タッチスクリーンしか持っていない。 –

+0

あなたはwinformsのアイデアにどのように結婚していますか? InkCanvasコントロールを使用してWPFのボックスからこれを行うことができます。このプロジェクトにまだ多くの時間を費やしていないのであれば、それほど古いものではないGUI技術に切り替えることをお勧めします。 – PMV

答えて

1

、タッチダウンイベントがのMouseDownイベント、フォームののMouseMoveイベントを通じてのMouseUpとtouchmoveてタッチアップして処理することができます。

注:私のマシンは、タッチとマウスの両方をサポートしています。私はデバイスや機械だけを触れることについてはわかりません。

次のコードでは、タッチ/マウスのやりとりでフォームに描画することができます。

public partial class Form1 : Form 
{ 
    Image signature; 
    bool clicked = false; 
    Point previousPoint; 

    public Form1() 
    { 
     this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.DoubleBuffer, true); 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     this.Paint += Form1_Paint; 
     this.MouseDown += Form1_MouseDown; 
     this.MouseUp += Form1_MouseUp; 
     this.MouseMove += Form1_MouseMove; 
     this.MouseLeave += Form1_MouseLeave; 

     this.FormClosing += Form1_FormClosing; 
    } 

    void Form1_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     //Dispose signature after closing the form to avoid memory leak 
     signature.Dispose(); 
    } 

    void Form1_Paint(object sender, PaintEventArgs e) 
    { 
     if (signature != null) 
      e.Graphics.DrawImage(signature, 0, 0); 
    } 

    void Form1_MouseDown(object sender, MouseEventArgs e) 
    { 
     clicked = true; 
     previousPoint = e.Location; 
    } 

    void Form1_MouseLeave(object sender, EventArgs e) 
    { 
     clicked = false; 
    } 

    void Form1_MouseUp(object sender, MouseEventArgs e) 
    { 
     clicked = false; 
    } 

    void Form1_MouseMove(object sender, MouseEventArgs e) 
    { 
     if (clicked) 
     { 
      if (signature == null) 
       signature = new Bitmap(this.Width, this.Height); 
      using (Graphics g = Graphics.FromImage(signature)) 
      { 
       g.DrawLine(Pens.Black, previousPoint, e.Location); 
       previousPoint = e.Location; 
       this.Invalidate(); 
      } 
     } 
    } 
} 

署名は画像に描画されます。したがって、必要に応じてデータベースにイメージを保存することができます。

+0

ご返信ありがとうございます。 作成した画像を別のフォームの画像ボックスに割り当てる際に問題が発生しました...これをやっています: 1. form2の署名をプロパティに変更します。 2.フォーム2をDialogresultフォームとして開きます。 3.ダイアログ結果の結果を格納し、フォーム2のボタンを使用して返します。 4. form1.pictureboxのform2.signatureの値を割り当てます エラーは次のとおりです。**タイプ 'System .ArgumentException 'System.Drawing.dllで発生しました 追加情報:パラメータが無効です** –

+0

配置されたイメージを割り当てている可能性があります。私のコードでは、イメージはFormClosingイベントに配置されます。閉じた後にイメージが必要な場合は、行signature.Dispose()を削除できます。しかし、使用後に画像が廃棄されることを確認してください。 – Kira

+0

これは問題でした...もう一度@kiraありがとうございましたが、今すぐフォームを閉じた後に署名を破棄することはできますか? –

関連する問題