InkCollectorNewInAirPacketsEventHandler-Delegat
Stellt die Methode dar, die das NewInAirPackets-Ereignis eines InkCollector-Objekts behandelt.
Namespace: Microsoft.Ink
Assembly: Microsoft.Ink (in Microsoft.Ink.dll)
Syntax
'Declaration
Public Delegate Sub InkCollectorNewInAirPacketsEventHandler ( _
sender As Object, _
e As InkCollectorNewInAirPacketsEventArgs _
)
'Usage
Dim instance As New InkCollectorNewInAirPacketsEventHandler(AddressOf HandlerMethod)
public delegate void InkCollectorNewInAirPacketsEventHandler(
Object sender,
InkCollectorNewInAirPacketsEventArgs e
)
public delegate void InkCollectorNewInAirPacketsEventHandler(
Object^ sender,
InkCollectorNewInAirPacketsEventArgs^ e
)
/** @delegate */
public delegate void InkCollectorNewInAirPacketsEventHandler(
Object sender,
InkCollectorNewInAirPacketsEventArgs e
)
JScript unterstützt keine Delegaten.
Parameter
- sender
Typ: System.Object
Das InkCollector-Quellobjekt dieses Ereignisses.
- e
Typ: Microsoft.Ink.InkCollectorNewInAirPacketsEventArgs
Das InkCollectorNewInAirPacketsEventArgs-Objekt, das die Ereignisdaten enthält.
Hinweise
Ein In-Air-Paket wird erstellt, wenn ein Benutzer einen Stift in der Nähe des Tabletts bewegt und sich der Cursor innerhalb des Fensters des InkCollector-Objekts befindet oder der Benutzer eine Maus innerhalb des Fensters bewegt, das dem InkCollector-Objekt zugeordnet ist. NewInAirPackets-Ereignisse werden schnell generiert, und der Ereignishandler muss umgehend reagieren, damit die Leistung nicht beeinträchtigt wird.
Beim Erstellen eines InkCollectorNewInAirPacketsEventHandler-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. Aus Leistungsgründen ist das Standardinteresse an einem Ereignis deaktiviert, es wird jedoch automatisch im verwalteten Code aktiviert, wenn Sie einen Ereignishandler hinzufügen.
Das NewInAirPackets-Ereignis wird auch im Auswahl- oder Löschmodus ausgelöst, nicht nur bei Freihandeingaben. 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.
Beispiele
In diesem C#-Beispiel wird im Formular ein Rechteck mit einem breiten Umriss gezeichnet, wenn sich die In-Air-Pakete innerhalb des Rechtecks befinden, oder mit einem schmalen Umriss, wenn sich die Pakete außerhalb des Rechtecks befinden. Hierdurch wird veranschaulicht, wie die Paketereignisse zum Steuern des Anwendungsverhaltens verwendet werden.
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using Microsoft.Ink;
namespace CSInAirPacketEvents
{
public class Form1 : System.Windows.Forms.Form
{
//...
InkCollector theInkCollector;
int indexX, indexY;
Rectangle rectInterest;
bool thickBorder;
public Form1()
{
//...
//Initialize the InkCollector object.
theInkCollector= new InkCollector(Handle);
theInkCollector.Enabled = true;
//Initialize the target rectangle
rectInterest = new Rectangle(40, 40, 200, 80);
thickBorder = false;
//Save the X and Y data locations within the packet data.
GetXYIndexes(ref indexX, ref indexY);
//Add the event handler for in-air packets
theInkCollector.NewInAirPackets += new InkCollectorNewInAirPacketsEventHandler(NewInAirPackets_Event);
}
//...
private void GetXYIndexes(ref int theXIndex, ref int theYIndex)
{
// Get the indexes of the X and Y data within the raw
// packet data array.
Guid [] theGuids = theInkCollector.DesiredPacketDescription;
for (int i = 0; i < theGuids.Length; i++)
{
if (theGuids[i].Equals(PacketProperty.X))
theXIndex = i;
if (theGuids[i].Equals(PacketProperty.Y))
theYIndex = i;
}
}
private void NewInAirPackets_Event(object sender, InkCollectorNewInAirPacketsEventArgs e)
{
Graphics g = this.CreateGraphics();
Point [] pt = new Point [1];
pt[0].X = e.PacketData[indexX];
pt[0].Y = e.PacketData[indexY];
theInkCollector.Renderer.InkSpaceToPixel(g, ref pt);
// The event may return with data for multiple packets.
// To simplify things, we'll only look at the first.
if (rectInterest.Contains(pt[0].X, pt[0].Y))
{
if (!thickBorder)
{
thickBorder = true;
Refresh();
}
}
else
{
if (thickBorder)
{
thickBorder = false;
Refresh();
}
}
}
private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
Graphics g = e.Graphics;
Pen thePen = new Pen(Color.Black, 2);
if (thickBorder)
thePen.Width = 5;
g.DrawRectangle(thePen, rectInterest);
}
// Event handler for the form's closed event
private void Form1_Closed(object sender, System.EventArgs e)
{
theInkCollector.Dispose();
theInkCollector= null;
}
}
}
In diesem Microsoft® Visual Basic® .NET-Beispiel wird im Formular ein Rechteck mit einem breiten Umriss gezeichnet, wenn sich die In-Air-Pakete innerhalb des Rechtecks befinden, oder mit einem schmalen Umriss, wenn sich die Pakete außerhalb des Rechtecks befinden. Hierdurch wird veranschaulicht, wie die Paketereignisse zum Steuern des Anwendungsverhaltens verwendet werden.
Imports Microsoft.Ink
Public Class Form1
Inherits System.Windows.Forms.Form
Dim theInkCollector As InkCollector
Dim indexX, indexY As Integer
Dim rectInterest As Rectangle
Dim thickBorder As Boolean
'...
Public Sub New()
MyBase.New()
'This call is required by the Windows Form Designer.
InitializeComponent()
'Initialize the InkCollector object.
theInkCollector = New InkCollector(Handle)
theInkCollector.Enabled = True
'Initialize the target rectangle
rectInterest = New Rectangle(40, 40, 200, 80)
thickBorder = False
'Save the X and Y data locations within the packet data.
GetXYIndexes(indexX, indexY)
'Add the event handler for in air packets
AddHandler theInkCollector.NewInAirPackets, AddressOf NewInAirPackets_Event
End Sub
'...
Private Sub GetXYIndexes(ByRef theXIndex As Integer, _
ByRef theYIndex As Integer)
' Get the indexes of the X and Y data within the raw
' packet data array.
Dim theGuids() As Guid = theInkCollector.DesiredPacketDescription
Dim i As Integer
For i = 0 To theGuids.Length - 1
If theGuids(i).Equals(PacketProperty.X) Then
theXIndex = i
End If
If theGuids(i).Equals(PacketProperty.Y) Then
theYIndex = i
End If
Next
End Sub
Private Sub NewInAirPackets_Event(ByVal sender As Object, _
ByVal e As InkCollectorNewInAirPacketsEventArgs)
'The event may return with data for multiple packets.
'To simplify things, we'll only look at the first.
If rectInterest.Contains( _
e.PacketData(indexX), e.PacketData(indexY)) Then
If thickBorder = False Then
thickBorder = True
Refresh()
End If
Else
If thickBorder = True Then
thickBorder = False
Refresh()
End If
End If
End Sub
Private Sub Form1_Paint(ByVal sender As Object, _
ByVal e As System.Windows.Forms.PaintEventArgs) _
Handles MyBase.Paint
Dim g As Graphics = e.Graphics
Dim thePen As New Pen(Color.Black, 2)
If thickBorder Then
thePen.Width = 5
End If
g.DrawRectangle(thePen, rectInterest)
End Sub
'Event handler for the form's closed event
Private Sub Form1_Closed(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Closed
theInkCollector.Dispose()
Set theInkCollector = Nothing
End Sub
End Class
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