2016-11-30 4 views
1

Ich arbeite an einem persönlichen Projekt und ich muss dem Kunden erlauben, eine "Unterschrift" auf ein neues Popup-Formular zu zeichnen, indem er die Ereignisse behandelt (vielleicht auf klicken und über-Maus-Ereignisse).C# Lassen Sie den Benutzer mit Mausklick auf Winform zeichnen

Diese Signatur muss in einem Bildobjekt gespeichert werden, um es in einem varbinary (max) Feld in einer Datenbank zu speichern.

Googlen herum funktioniert nicht, Irgendeine Idee, wie dies erreicht werden kann?

+1

Werfen Sie einen Blick auf diesen Artikel: https://www.codeproject.com/articles/17895/handling-touch-pen-oder-mouse-igititizer-input-in-you –

+0

Vielen Dank für den Kommentar @AbdelRaoof aber Es scheint, dass die herunterladbaren Dateien für diesen bestimmten Beitrag nicht auf VS2015 geöffnet werden können. Es scheint auch, dass der Code mit Stift verwendet werden soll. Aber die Computer, die das System verwenden werden, haben keinen Stift und nur einen Touchscreen. –

+0

Wie verheiratet sind Sie mit der Idee der Winforms? Sie können dies in WPF mit dem InkCanvas-Steuerelement direkt ausführen. Wenn Sie nicht schon viel Zeit in dieses Projekt investiert haben, ist es vielleicht eine gute Idee, zu einer GUI-Technologie zu wechseln, die nicht ganz so alt ist. – PMV

Antwort

1

ich in meinem Touch-Screen-Laptop überprüft, kann Landung Ereignis durch und Berührungsbewegungs durch Move Ereignis des Formulars MouseDown- Ereignis, touchup durch MouseUp behandelt werden.

Hinweis: Meine Maschine hat sowohl Touch- als auch Mausunterstützung. Ich bin mir nicht sicher, ob nur Geräte oder Maschinen berührt werden.

Der folgende Code ermöglicht es Ihnen, durch Berührung/Maus-Interaktionen auf das Formular zu zeichnen.

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(); 
      } 
     } 
    } 
} 

Die Signatur wird auf ein Bild gezeichnet. So können Sie das Bild nach Bedarf in Ihrer Datenbank speichern.

+0

danke für Ihre Antwort. Jetzt habe ich Probleme mit der Zuordnung des erstellten Bildes auf einem Bildfeld auf einem anderen Formular ... Ich mache das: 1. Ändern Sie die Signatur in der Form2 in eine Eigenschaft. 2. Öffnen Sie das Formular2 als Formular Dialogresult. 3. Speichern Sie das Ergebnis des Dialogresult und geben Sie es mit einer Schaltfläche auf dem Formular2 4. Weisen Sie den Wert aus form2.signature in der form1.picturebox Der Fehler ist folgender: ** Eine nicht behandelte Ausnahme vom Typ 'System .ArgumentException 'ist in System.Drawing.dll aufgetreten Weitere Informationen: Parameter ist nicht gültig. ** –

+0

Möglicherweise weisen Sie ein entsorgtes Bild zu. In meinem Code befindet sich das Bild in FormClosing-Ereignis. Wenn Sie das Bild nach dem Schließen benötigen, können Sie die Zeile signature.Dispose() entfernen. Aber stellen Sie sicher, das Bild wird nach der Verwendung entsorgt. – Kira

+0

Das war das Problem ... Danke nochmal @kira aber jetzt wie kann ich die Signatur nach dem Formular ablegen lassen? –

Verwandte Themen