Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Sürükle ve bırak işleminin bir parçası olarak aktarılan veriler bir veri nesnesinde depolanır. Kavramsal olarak, bir veri nesnesi aşağıdaki çiftlerden birini veya daha fazlasını içerir:
Gerçek verileri içeren bir Object.
Karşılık gelen veri biçimi tanımlayıcısı.
Verilerin kendisi, temel Objectolarak temsil edilebilen herhangi bir şeyden oluşabilir. Karşılık gelen veri biçimi, verinin hangi formatta olduğu hakkında ipucu veren bir dize veya Type'dır. Veri nesneleri birden çok veri/veri biçimi çifti barındırmayı destekler; bu, tek bir veri nesnesinin birden çok biçimde veri sağlamasına olanak tanır.
Veri Nesneleri
Tüm veri nesneleri, veri aktarımını etkinleştiren ve kolaylaştıran aşağıdaki standart yöntem kümesini sağlayan IDataObject arabirimini uygulamalıdır.
| Yöntem | Özet |
|---|---|
| GetData | Belirtilen veri biçiminde bir veri nesnesi alır. |
| GetDataPresent | Verilerin belirtilen biçimde kullanılabilir veya dönüştürülebilir olup olmadığını denetler. |
| GetFormats | Bu veri nesnesindeki verilerin depolandığı veya dönüştürülebileceği biçimlerin listesini döndürür. |
| SetData | Belirtilen verileri bu veri nesnesinde depolar. |
WPF, IDataObject sınıfında temel bir DataObject uygulaması sağlar. Stok DataObject sınıfı birçok yaygın veri aktarımı senaryosu için yeterlidir.
Bit eşlem, CSV, dosya, HTML, RTF, dize, metin ve ses gibi önceden tanımlanmış birkaç biçim vardır. WPF ile sağlanan önceden tanımlanmış veri biçimleri hakkında bilgi için DataFormats sınıf başvurusu konusuna bakın.
Veri nesneleri genellikle verileri ayıklarken tek bir biçimde depolanan verileri otomatik olarak farklı bir biçime dönüştürmek için bir özellik içerir; bu tesis otomatik dönüştürme olarak adlandırılır. Bir veri nesnesinde kullanılabilen veri biçimlerini sorgularken, otomatik dönüştürülebilir veri biçimleri yerel veri biçimlerinden filtrelenebilir; GetFormats(Boolean) veya GetDataPresent(String, Boolean) yöntemi çağrılarak ve autoConvert parametresi falseolarak belirtilebilir.
SetData(String, Object, Boolean) yöntemiyle bir veri nesnesine veri eklerken, autoConvert parametresi falseolarak ayarlanarak verilerin otomatik olarak dönüştürülmesi yasaklanabilir.
Veri Nesneleri ile Çalışma
Bu bölümde, veri nesneleri oluşturmaya ve bunlarla çalışmaya yönelik yaygın teknikler açıklanmaktadır.
Yeni Veri Nesneleri Oluşturma
DataObject sınıfı, yeni bir DataObject örneğini tek bir veri/veri biçimi çifti ile doldurmayı kolaylaştıran birkaç aşırı yüklenmiş oluşturucu sağlar.
Aşağıdaki örnek kod yeni bir veri nesnesi oluşturur ve veri nesnesini bir dize ve belirtilen veri biçimiyle başlatmak için DataObject(DataObject(String, Object)) aşırı yüklenmiş oluşturuculardan birini kullanır. Bu durumda, veri biçimi bir dize tarafından belirtilir; DataFormats sınıfı önceden tanımlanmış tür dizeleri kümesi sağlar. Depolanan verilerin otomatik olarak dönüştürülmesi varsayılan olarak izin verilir.
string stringData = "Some string data to store...";
string dataFormat = DataFormats.UnicodeText;
DataObject dataObject = new DataObject(dataFormat, stringData);
Dim stringData As String = "Some string data to store..."
Dim dataFormat As String = DataFormats.UnicodeText
Dim dataObject As New DataObject(dataFormat, stringData)
Veri nesnesi oluşturan kod örnekleri için bkz. Veri Nesnesi Oluşturma.
Verileri Birden Çok Biçimde Depolama
Tek bir veri nesnesi, verileri birden çok biçimde depolar. Tek bir veri nesnesi içinde birden çok veri biçiminin stratejik kullanımı, veri nesnesinin yalnızca tek bir veri biçiminin temsil edilebildiği duruma göre, potansiyel olarak daha fazla çeşitlilikteki bırakma hedefi tarafından kullanılabilmesini sağlar. Genel olarak, bir sürükleme kaynağının bırakma hedefleri tarafından tüketilebilecek veri biçimleri konusunda tarafsız olması gerektiğini unutmayın.
Aşağıdaki örnekte, bir veri nesnesine birden çok biçimde veri eklemek için SetData(String, Object) yönteminin nasıl kullanılacağı gösterilmektedir.
DataObject dataObject = new DataObject();
string sourceData = "Some string data to store...";
// Encode the source string into Unicode byte arrays.
byte[] unicodeText = Encoding.Unicode.GetBytes(sourceData); // UTF-16
byte[] utf8Text = Encoding.UTF8.GetBytes(sourceData);
byte[] utf32Text = Encoding.UTF32.GetBytes(sourceData);
// The DataFormats class does not provide data format fields for denoting
// UTF-32 and UTF-8, which are seldom used in practice; the following strings
// will be used to identify these "custom" data formats.
string utf32DataFormat = "UTF-32";
string utf8DataFormat = "UTF-8";
// Store the text in the data object, letting the data object choose
// the data format (which will be DataFormats.Text in this case).
dataObject.SetData(sourceData);
// Store the Unicode text in the data object. Text data can be automatically
// converted to Unicode (UTF-16 / UCS-2) format on extraction from the data object;
// Therefore, explicitly converting the source text to Unicode is generally unnecessary, and
// is done here as an exercise only.
dataObject.SetData(DataFormats.UnicodeText, unicodeText);
// Store the UTF-8 text in the data object...
dataObject.SetData(utf8DataFormat, utf8Text);
// Store the UTF-32 text in the data object...
dataObject.SetData(utf32DataFormat, utf32Text);
Dim dataObject As New DataObject()
Dim sourceData As String = "Some string data to store..."
' Encode the source string into Unicode byte arrays.
Dim unicodeText() As Byte = Encoding.Unicode.GetBytes(sourceData) ' UTF-16
Dim utf8Text() As Byte = Encoding.UTF8.GetBytes(sourceData)
Dim utf32Text() As Byte = Encoding.UTF32.GetBytes(sourceData)
' The DataFormats class does not provide data format fields for denoting
' UTF-32 and UTF-8, which are seldom used in practice; the following strings
' will be used to identify these "custom" data formats.
Dim utf32DataFormat As String = "UTF-32"
Dim utf8DataFormat As String = "UTF-8"
' Store the text in the data object, letting the data object choose
' the data format (which will be DataFormats.Text in this case).
dataObject.SetData(sourceData)
' Store the Unicode text in the data object. Text data can be automatically
' converted to Unicode (UTF-16 / UCS-2) format on extraction from the data object;
' Therefore, explicitly converting the source text to Unicode is generally unnecessary, and
' is done here as an exercise only.
dataObject.SetData(DataFormats.UnicodeText, unicodeText)
' Store the UTF-8 text in the data object...
dataObject.SetData(utf8DataFormat, utf8Text)
' Store the UTF-32 text in the data object...
dataObject.SetData(utf32DataFormat, utf32Text)
Kullanılabilir Biçimler için Veri Nesnesi Sorgulama
Tek bir veri nesnesi rastgele sayıda veri biçimi içerebileceğinden, veri nesneleri kullanılabilir veri biçimlerinin listesini almaya yönelik olanaklar içerir.
Aşağıdaki örnek kod, bir veri nesnesinde kullanılabilen tüm veri biçimlerini belirten bir dizi dize almak için GetFormats aşırı yüklemesini kullanır (hem yerel hem de otomatik dönüştürme yoluyla).
DataObject dataObject = new DataObject("Some string data to store...");
// Get an array of strings, each string denoting a data format
// that is available in the data object. This overload of GetDataFormats
// returns all available data formats, native and auto-convertible.
string[] dataFormats = dataObject.GetFormats();
// Get the number of data formats present in the data object, including both
// auto-convertible and native data formats.
int numberOfDataFormats = dataFormats.Length;
// To enumerate the resulting array of data formats, and take some action when
// a particular data format is found, use a code structure similar to the following.
foreach (string dataFormat in dataFormats)
{
if (dataFormat == DataFormats.Text)
{
// Take some action if/when data in the Text data format is found.
break;
}
else if(dataFormat == DataFormats.StringFormat)
{
// Take some action if/when data in the string data format is found.
break;
}
}
Dim dataObject As New DataObject("Some string data to store...")
' Get an array of strings, each string denoting a data format
' that is available in the data object. This overload of GetDataFormats
' returns all available data formats, native and auto-convertible.
Dim dataFormats() As String = dataObject.GetFormats()
' Get the number of data formats present in the data object, including both
' auto-convertible and native data formats.
Dim numberOfDataFormats As Integer = dataFormats.Length
' To enumerate the resulting array of data formats, and take some action when
' a particular data format is found, use a code structure similar to the following.
For Each dataFormat As String In dataFormats
If dataFormat = System.Windows.DataFormats.Text Then
' Take some action if/when data in the Text data format is found.
Exit For
ElseIf dataFormat = System.Windows.DataFormats.StringFormat Then
' Take some action if/when data in the string data format is found.
Exit For
End If
Next dataFormat
Kullanılabilir veri biçimleri için bir veri nesnesini sorgulayan kod örnekleri için bkz. Veri Nesnesinde Veri Biçimlerini Listeleme. Belirli bir veri biçiminin varlığı için bir veri nesnesini sorgulama örnekleri için bkz. Veri Nesnesinde Veri Biçimi Olup Olmadığını Belirleme.
Veri Nesnesinden Veri Alma
Belirli bir biçimdeki bir veri nesnesinden veri almak, yalnızca GetData yöntemlerinden birini çağırmayı ve istenen veri biçimini belirtmeyi içerir. belirli bir veri biçiminin olup olmadığını denetlemek için GetDataPresent yöntemlerinden biri kullanılabilir. GetData bir Objectiçindeki verileri döndürür; veri biçimine bağlı olarak, bu nesne türe özgü bir kapsayıcıya yayınlanabilir.
Aşağıdaki örnek kod, belirtilen veri biçiminin kullanılabilir olup olmadığını denetlemek için (yerel veya otomatik dönüştürme yoluyla) GetDataPresent(String) aşırı yüklemesini kullanır. Belirtilen biçim kullanılabilir durumdaysa, örnek GetData(String) yöntemini kullanarak verileri alır.
DataObject dataObject = new DataObject("Some string data to store...");
string desiredFormat = DataFormats.UnicodeText;
byte[] data = null;
// Use the GetDataPresent method to check for the presence of a desired data format.
// This particular overload of GetDataPresent looks for both native and auto-convertible
// data formats.
if (dataObject.GetDataPresent(desiredFormat))
{
// If the desired data format is present, use one of the GetData methods to retrieve the
// data from the data object.
data = dataObject.GetData(desiredFormat) as byte[];
}
Dim dataObject As New DataObject("Some string data to store...")
Dim desiredFormat As String = DataFormats.UnicodeText
Dim data() As Byte = Nothing
' Use the GetDataPresent method to check for the presence of a desired data format.
' This particular overload of GetDataPresent looks for both native and auto-convertible
' data formats.
If dataObject.GetDataPresent(desiredFormat) Then
' If the desired data format is present, use one of the GetData methods to retrieve the
' data from the data object.
data = TryCast(dataObject.GetData(desiredFormat), Byte())
End If
Veri nesnesinden veri alan kod örnekleri için bkz. Belirli Bir Veri Biçiminde Veri Alma.
Veri Nesnesinden Veri Kaldırma
Veriler bir veri nesnesinden doğrudan kaldırılamaz. Veri nesnesinden verileri etkili bir şekilde kaldırmak için şu adımları izleyin:
Yalnızca saklamak istediğiniz verileri içerecek yeni bir veri nesnesi oluşturun.
eski veri nesnesinden yeni veri nesnesine istenen verileri "kopyalayın". Verileri kopyalamak için GetData yöntemlerinden birini kullanarak ham verileri içeren bir Object alın ve ardından verileri yeni veri nesnesine eklemek için SetData yöntemlerinden birini kullanın.
Eski veri nesnesini yenisiyle değiştirin.
.NET Desktop feedback