DataObject-Klasse
Implementiert einen grundlegenden Datenübertragungsmechanismus.
Namespace: System.Windows.Forms
Assembly: System.Windows.Forms (in system.windows.forms.dll)
Syntax
'Declaration
<ClassInterfaceAttribute(ClassInterfaceType.None)> _
Public Class DataObject
Implements IDataObject, IDataObject
'Usage
Dim instance As DataObject
[ClassInterfaceAttribute(ClassInterfaceType.None)]
public class DataObject : IDataObject, IDataObject
[ClassInterfaceAttribute(ClassInterfaceType::None)]
public ref class DataObject : IDataObject, IDataObject
/** @attribute ClassInterfaceAttribute(ClassInterfaceType.None) */
public class DataObject implements IDataObject, IDataObject
ClassInterfaceAttribute(ClassInterfaceType.None)
public class DataObject implements IDataObject, IDataObject
Hinweise
DataObject implementiert die IDataObject-Schnittstelle, deren Methoden einen formatunabhängigen Mechanismus zur Datenübertragung bereitstellen.
Ein DataObject wird typischerweise in der Clipboard des Systems sowie bei Drag & Drop-Vorgängen verwendet. Die DataObject-Klasse stellt die empfohlene Implementierung der IDataObject-Schnittstelle bereit. Es wird empfohlen, dass Sie die DataObject-Klasse verwenden, statt die Implementierung von IDataObject selbst vorzunehmen.
In einem DataObject können mehrere Datenmengen in verschiedenen Formaten gespeichert werden. Daten werden über das zugeordnete Format aus einem DataObject abgerufen. Da die Zielanwendung möglicherweise nicht bekannt ist, können Sie die Wahrscheinlichkeit erhöhen, dass die Daten ein für eine Anwendung geeignetes Format aufweisen, indem Sie die Daten in DataObject in mehreren Formaten ablegen. Die vordefinierten Formate finden Sie unter DataFormats. Sie können ein eigenes Format implementieren, indem Sie eine Instanz der DataFormats.Format-Klasse erstellen.
Zum Speichern von Daten in einem DataObject übergeben Sie die Daten an den Konstruktor oder rufen SetData auf. Sie können demselben DataObject Daten in mehreren Formaten hinzufügen. Wenn die hinzugefügten Daten nur im systemeigenen Format abgerufen werden sollen, rufen Sie SetData(String,Boolean,Object) auf, wobei der autoConvert-Parameter auf false festgelegt ist.
Daten können aus einem DataObject in einem beliebigen Format abgerufen werden, das mit GetData kompatibel ist. Beispielsweise kann Text in Unicode konvertiert werden. Rufen Sie GetData auf, um Daten in dem Format abzurufen, in dem sie gespeichert wurden. Der autoConvert-Parameter muss dabei auf false festgelegt sein.
Rufen Sie GetFormats auf, um zu bestimmen, in welchen Formaten die Daten gespeichert werden. Rufen Sie GetDataPresent mit dem gewünschten Format auf, um zu bestimmen, ob ein Format verfügbar ist.
In Microsoft .NET Framework, Version 2.0 stellt die DataObject-Klasse zusätzliche Methoden bereit, die die Arbeit mit Daten in gängigen Formaten erleichtern. Sie können dem DataObject Daten in einem bestimmten Format hinzuzufügen, indem Sie die entsprechende SetFormat-Methode verwenden, z. B. SetText. Wenn Sie Daten in einem bestimmten Format aus dem DataObject abrufen möchten, rufen Sie zunächst die entsprechende ContainsFormat-Methode auf (z. B. ContainsText), um zu bestimmen, ob das DataObject Daten in diesem Format enthält. Rufen Sie dann die entsprechende GetFormat-Methode auf (z. B. GetText), um die Daten abzurufen, falls diese im DataObject enthalten sind.
Hinweis
Wenn das Metadateiformat über die Zwischenablage verwendet wird, müssen Sie ggf. Folgendes berücksichtigen: Aufgrund einer Beschränkung in der aktuellen Implementierung der DataObject-Klasse wird das von .NET Framework verwendete Metadateiformat möglicherweise nicht von Anwendungen erkannt, die ein älteres Metadateiformat verwenden. In diesem Fall müssen Sie die Interaktion mit den Anwendungsprogrammierschnittstellen (APIs) der Win32-Zwischenablage sicherstellen. Weitere Informationen finden Sie im Artikel 323530, "Metafiles on Clipboard Are Not Visible to All Applications", in der Microsoft Knowledge Base unter http://support.microsoft.
Um ein Objekt in der Zwischenablage ablegen zu können, muss es serialisierbar sein. Weitere Informationen zur Serialisierung finden Sie unter Serialisierung. Wenn für die Zielanwendung ein besonderes Datenformat erforderlich ist, kann die Anwendung aufgrund der Header, die den Daten bei der Serialisierung hinzugefügt werden, die Daten möglicherweise nicht erkennen. Um das Datenformat beizubehalten, fügen Sie die Daten als Byte-Array einem MemoryStream hinzu, und übergeben Sie den MemoryStream an die SetData-Methode.
Beispiel
Im folgenden Codebeispiel werden Daten in einem DataObject hinzugefügt. Zunächst wird ein neues DataObject erstellt und in diesem eine Komponente gespeichert. Dann wird überprüft, ob die Daten im entsprechenden Typ im DataObject vorhanden sind. Das Ergebnis wird in einem Textfeld angezeigt. Für diesen Code muss textBox1
erstellt worden sein.
Private Sub AddMyData3()
' Creates a component to store in the data object.
Dim myComponent As New Component()
' Creates a new data object.
Dim myDataObject As New DataObject()
' Adds the component to the DataObject.
myDataObject.SetData(myComponent)
' Prints whether data of the specified type is in the DataObject.
Dim myType As Type = myComponent.GetType()
If myDataObject.GetDataPresent(myType) Then
textBox1.Text = "Data of type " & myType.ToString() & _
" is present in the DataObject"
Else
textBox1.Text = "Data of type " & myType.ToString() & _
" is not present in the DataObject"
End If
End Sub 'AddMyData3
private void AddMyData3() {
// Creates a component to store in the data object.
Component myComponent = new Component();
// Creates a new data object.
DataObject myDataObject = new DataObject();
// Adds the component to the DataObject.
myDataObject.SetData(myComponent);
// Prints whether data of the specified type is in the DataObject.
Type myType = myComponent.GetType();
if(myDataObject.GetDataPresent(myType))
textBox1.Text = "Data of type " + myType.ToString() +
" is present in the DataObject";
else
textBox1.Text = "Data of type " + myType.ToString() +
" is not present in the DataObject";
}
private:
void AddMyData3()
{
// Creates a component to store in the data object.
Component^ myComponent = gcnew Component;
// Creates a new data object.
DataObject^ myDataObject = gcnew DataObject;
// Adds the component to the DataObject.
myDataObject->SetData( myComponent );
// Prints whether data of the specified type is in the DataObject.
Type^ myType = myComponent->GetType();
if ( myDataObject->GetDataPresent( myType ) )
{
textBox1->Text = String::Concat( "Data of type ", myType,
" is present in the DataObject" );
}
else
{
textBox1->Text = String::Concat( "Data of type ", myType,
" is not present in the DataObject" );
}
}
private void AddMyData3()
{
// Creates a component to store in the data object.
Component myComponent = new Component();
// Creates a new data object.
DataObject myDataObject = new DataObject();
// Adds the component to the DataObject.
myDataObject.SetData(myComponent);
// Prints whether data of the specified type is in the DataObject.
Type myType = myComponent.GetType();
if (myDataObject.GetDataPresent(myType)) {
textBox1.set_Text("Data of type " + myType.ToString()
+ " is present in the DataObject");
}
else {
textBox1.set_Text("Data of type " + myType.ToString()
+ " is not present in the DataObject");
}
} //AddMyData3
Im nächsten Beispiel werden die in einem DataObject gespeicherten Daten abgerufen. Zunächst wird ein neues DataObject mit Textdaten erstellt. Dann werden die Daten abgerufen, wobei als Format Zeichenfolge angegeben wird, und in einem Textfeld angezeigt. Das Datenformat wird automatisch von Text in eine Zeichenfolge konvertiert. Für diesen Code muss textBox1
erstellt worden sein.
Private Sub GetMyData2()
' Creates a new data object using a string and the text format.
Dim myDataObject As New DataObject(DataFormats.Text, "Text to Store")
' Prints the string in a text box.
textBox1.Text = myDataObject.GetData("System.String").ToString()
End Sub 'GetMyData2
private void GetMyData2() {
// Creates a new data object using a string and the text format.
DataObject myDataObject = new DataObject(DataFormats.Text, "Text to Store");
// Prints the string in a text box.
textBox1.Text = myDataObject.GetData("System.String").ToString();
}
void GetMyData2()
{
// Creates a new data object using a string and the text format.
DataObject^ myDataObject = gcnew DataObject( DataFormats::Text,"Text to Store" );
// Prints the string in a text box.
textBox1->Text = myDataObject->GetData( "System.String" )->ToString();
}
private void GetMyData2()
{
// Creates a new data object using a string and the text format.
DataObject myDataObject = new DataObject(DataFormats.Text,
"Text to Store");
// Prints the string in a text box.
textBox1.set_Text(myDataObject.GetData("System.String").ToString());
} //GetMyData2
Vererbungshierarchie
System.Object
System.Windows.Forms.DataObject
Threadsicherheit
Alle öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.
Plattformen
Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.
Versionsinformationen
.NET Framework
Unterstützt in: 2.0, 1.1, 1.0
.NET Compact Framework
Unterstützt in: 2.0
Siehe auch
Referenz
DataObject-Member
System.Windows.Forms-Namespace
Clipboard-Klasse
IDataObject
DataFormats-Klasse