Freigeben über


InkPicture.Stroke-Ereignis

Tritt ein, wenn der Benutzer das Zeichnen eines neuen Strichs auf einem beliebigen Tablett abgeschlossen hat.

Namespace:  Microsoft.Ink
Assembly:  Microsoft.Ink (in Microsoft.Ink.dll)

Syntax

'Declaration
Public Event Stroke As InkCollectorStrokeEventHandler
'Usage
Dim instance As InkPicture
Dim handler As InkCollectorStrokeEventHandler

AddHandler instance.Stroke, handler
public event InkCollectorStrokeEventHandler Stroke
public:
 event InkCollectorStrokeEventHandler^ Stroke {
    void add (InkCollectorStrokeEventHandler^ value);
    void remove (InkCollectorStrokeEventHandler^ value);
}
/** @event */
public void add_Stroke (InkCollectorStrokeEventHandler value)
/** @event */
public void remove_Stroke (InkCollectorStrokeEventHandler value)
JScript unterstützt keine Ereignisse.

Hinweise

Der Ereignishandler empfängt ein Argument vom Typ InkCollectorStrokeEventArgs, das Daten zu diesem Ereignis enthält.

Beim Erstellen eines InkCollectorStrokeEventHandler-Delegaten bestimmen Sie die Methode für die Ereignisbehandlung. Um dem Ereignishandler das Ereignis zuzuordnen, fügen Sie dem Ereignis eine Instanz des Delegaten hinzu. Der Ereignishandler wird bei jedem Eintreten des Ereignisses aufgerufen, sofern der Delegat nicht entfernt wird. Das Standardinteresse an Ereignissen ist aktiviert.

Das Stroke-Ereignis wird selbst im Auswahl- oder Löschmodus ausgelöst, nicht nur bei der Freihandeingabe. Dies erfordert, dass Sie den Bearbeitungsmodus (den Sie festlegen müssen) überwachen und den Modus kennen, bevor Sie das Ereignis interpretieren. Der Vorteil dieser Anforderung besteht in einer größeren Flexibilität für Neuerungen auf der Plattform, da Plattformereignisse besser erkannt werden können.

Hinweis

Das Stroke-Ereignis wird ausgelöst, wenn der Benutzer einen Strich beendet, nicht wenn der Strokes-Auflistung ein Stroke-Objekt hinzugefügt wird. Wenn der Benutzer zunächst mit dem Zeichnen eines Strichs beginnt, wird der Strich sofort der Strokes-Auflistung hinzugefügt. Das Stroke-Ereignis wird allerdings erst ausgelöst, wenn der Strich beendet wurde. Daher können Stroke-Objekte in der Strokes-Auflistung enthalten sein, bevor der Stroke-Ereignishandler für dieses Stroke-Objekt ausgelöst wird.

Beispiele

In diesem Beispiel wird veranschaulicht, wie Sie das CursorDown-Ereignis und das Stroke-Ereignis abonnieren können, um zu berechnen, wie viel Zeit der Benutzer zum Erstellen eines Strichs benötigt.

Am Anfang eines Strichs wird das CursorDown-Ereignis ausgelöst. Die aktuelle Zeit wird in der ExtendedProperties-Auflistung des Stroke-Objekts platziert.

Private Sub mInkObject_CursorDown(ByVal sender As Object, ByVal e As InkCollectorCursorDownEventArgs)
    ' add extended property indicating the time the stroke started
    ' STROKE_START_GUID is class level string via GUID generator
    e.Stroke.ExtendedProperties.Add(New Guid(STROKE_START_GUID), DateTime.Now)
End Sub
private void mInkObject_CursorDown(object sender, InkCollectorCursorDownEventArgs e)
{
    // add extended property indicating the time the stroke started
    // STROKE_START_GUID is class level string via GUID generator
    e.Stroke.ExtendedProperties.Add(new Guid(STROKE_START_GUID), DateTime.Now);
}

Wenn der Strich abgeschlossen wurde, wird das Stroke-Ereignis ausgelöst. Die Startzeit wird aus der ExtendedProperties-Auflistung des Stroke-Objekts abgerufen und zum Berechnen der verstrichenen Zeit verwendet.

Private Sub mInkObject_Stroke1(ByVal sender As Object, ByVal e As InkCollectorStrokeEventArgs)
    ' check to see if extended property for start time exists
    ' Attempting to access an extended property that hasn't been created throws an exception
    ' STROKE_START_GUID is class level string via GUID generator
    If (e.Stroke.ExtendedProperties.DoesPropertyExist(New Guid(STROKE_START_GUID))) Then

        Dim startTime As DateTime = DirectCast(e.Stroke.ExtendedProperties(New Guid(STROKE_START_GUID)).Data, DateTime)
        Dim endTime As DateTime = DateTime.Now
        Dim span As TimeSpan = New TimeSpan(endTime.Ticks - startTime.Ticks)

        ' add extended property indicating the time the stroke ended
        ' STROKE_END_GUID is class level string via GUID generator
        e.Stroke.ExtendedProperties.Add(New Guid(STROKE_END_GUID), endTime)

        ' display the number of seconds in creating this stroke
        Me.statusLabelStrokeTime.Text = span.TotalSeconds.ToString()
    End If
End Sub
private void mInkObject_Stroke1(object sender, InkCollectorStrokeEventArgs e)
{
    // check to see if extended property for start time exists
    // Attempting to access an extended property that hasn't been created throws an exception
    // STROKE_START_GUID is class level string via GUID generator
    if (e.Stroke.ExtendedProperties.DoesPropertyExist(new Guid(STROKE_START_GUID)))
    {
        DateTime startTime = (DateTime)e.Stroke.ExtendedProperties[new Guid(STROKE_START_GUID)].Data;
        DateTime endTime = DateTime.Now;
        TimeSpan span = new TimeSpan(endTime.Ticks - startTime.Ticks);

        // add extended property indicating the time the stroke ended
        // STROKE_END_GUID is class level string via GUID generator
        e.Stroke.ExtendedProperties.Add(new Guid(STROKE_END_GUID), endTime);

        // display the number of seconds in creating this stroke
        this.statusLabelStrokeTime.Text = span.TotalSeconds.ToString();
    }
}

In diesem Beispiel erstellt der Ereignishandler einen Schattenstrich für das Stroke-Ereignis, indem er ein neues Stroke-Objekt auf der Grundlage des aktuellen Stroke-Objekts erstellt und dann die Farbe und Position des neu erstellten Stroke-Objekts ändert.

Private Sub mInkObject_Stroke2(ByVal sender As Object, ByVal e As InkCollectorStrokeEventArgs)
    Me.mNumStroke = Me.mNumStroke + 1
    statusLabelStrokeCount.Text = Me.mNumStroke.ToString()

    ' Add a new stroke created from the stroke points of the current stroke
    Dim StrokeShadow As Stroke = e.Stroke.Ink.CreateStroke(e.Stroke.GetPoints())

    ' clone the DrawingAttributes and set color to Gray
    StrokeShadow.DrawingAttributes = e.Stroke.DrawingAttributes.Clone()
    StrokeShadow.DrawingAttributes.Color = Color.Gray

    ' use MaskPen to keep the shadow stroke in the background
    StrokeShadow.DrawingAttributes.RasterOperation = RasterOperation.MaskPen

    ' offset the shadow stroke
    StrokeShadow.Move(200, 200)

    ' redraw the ink canvas
    panelInkCanvas.Invalidate()

End Sub
private void mInkObject_Stroke2(object sender, InkCollectorStrokeEventArgs e)
{
    this.mNumStroke++;
    statusLabelStrokeCount.Text = this.mNumStroke.ToString();

    // Add a new stroke created from the stroke points of the current stroke
    Stroke StrokeShadow = e.Stroke.Ink.CreateStroke(e.Stroke.GetPoints());

    // clone the DrawingAttributes and set color to Gray
    StrokeShadow.DrawingAttributes = e.Stroke.DrawingAttributes.Clone();
    StrokeShadow.DrawingAttributes.Color = Color.Gray;

    // use MaskPen to keep the shadow stroke in the background
    StrokeShadow.DrawingAttributes.RasterOperation = RasterOperation.MaskPen;

    // offset the shadow stroke
    StrokeShadow.Move(200, 200);

    // redraw the ink canvas
    panelInkCanvas.Invalidate();

}

Plattformen

Windows Vista

.NET Framework und .NET Compact Framework unterstützen nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

Versionsinformationen

.NET Framework

Unterstützt in: 3.0

Siehe auch

Referenz

InkPicture-Klasse

InkPicture-Member

Microsoft.Ink-Namespace

Cursor

InkCollectorStrokeEventArgs

Stroke

Strokes.StrokesAdded