Visual Basic (Declaration) | |
---|---|
Public Delegate Function GetValueDelegate( _ ByVal value As String _ ) As Object |
Visual Basic (Usage) | Copy Code |
---|---|
Dim instance As New GetValueDelegate(AddressOf HandlerMethod) |
Parameters
- value
- a string representation of the DICOM element value that is to be converted
Return Value
An System.Object of the desired type.This example will retrieve a value from a data set as a PersonName type using a delegate
Visual Basic | Copy Code |
---|---|
''' Public Class PersonName Private _innerArray As String() = New String(4) {String.Empty, String.Empty, String.Empty, String.Empty, String.Empty} ''' Access this person name instance as array. Index range is ''' bounded between 0 (family name) and 4 (name suffix). Default Public Property Item(ByVal index As Integer) As String Set(ByVal value As String) If Value Is Nothing OrElse Value.Length < 64 Then _innerArray(index) = Value Else Throw New DicomException("Length of new entry exceeds 64 characters.") End If End Set Get Return _innerArray(index) End Get End Property Private Const _familyNameIndex As Integer = 0 Private Const _givenNameIndex As Integer = 1 Private Const _middleNameIndex As Integer = 2 Private Const _namePrefixIndex As Integer = 3 Private Const _nameSuffixIndex As Integer = 4 ''' Access person name part family name. Public Property FamilyName() As String Set(ByVal value As String) If Value Is Nothing OrElse Value.Length < 64 Then _fullName = Nothing _innerArray(_familyNameIndex) = Value Else Throw New DicomException("Length of family name exceeds 64 characters.") End If End Set Get Return _innerArray(_familyNameIndex) End Get End Property ''' Access person name part given name. Public Property GivenName() As String Set(ByVal value As String) If Value Is Nothing OrElse Value.Length < 64 Then _fullName = String.Empty _innerArray(_givenNameIndex) = Value Else Throw New DicomException("Length of family name exceeds 64 characters.") End If End Set Get Return _innerArray(_givenNameIndex) End Get End Property ''' Access person name part middle name. Public Property MiddleName() As String Set(ByVal value As String) If Value Is Nothing OrElse Value.Length < 64 Then _fullName = String.Empty _innerArray(_middleNameIndex) = Value Else Throw New DicomException("Length of family name exceeds 64 characters.") End If End Set Get Return _innerArray(_middleNameIndex) End Get End Property ''' Access person name part name prefix. Public Property NamePrefix() As String Set(ByVal value As String) If Value Is Nothing OrElse Value.Length < 64 Then _fullName = String.Empty _innerArray(_namePrefixIndex) = Value Else Throw New DicomException("Length of family name exceeds 64 characters.") End If End Set Get Return _innerArray(_namePrefixIndex) End Get End Property ''' Access person name part name suffix. Public Property NameSuffix() As String Set(ByVal value As String) If Value Is Nothing OrElse Value.Length < 64 Then _fullName = String.Empty _innerArray(_nameSuffixIndex) = Value Else Throw New DicomException("Length of family name exceeds 64 characters.") End If End Set Get Return _innerArray(_nameSuffixIndex) End Get End Property Private _fullName As String = String.Empty ''' Access full person name string representation. According ''' to the DICOM standard "^" is used as separator of different ''' person name parts. Public Property FullName() As String Set(ByVal value As String) _fullName = Value If Not _fullName Is Nothing Then Dim s As String() Dim i As Integer If _fullName.Contains("^") Then s = _fullName.Split("^"c) Else s = _fullName.Split(" "c) End If i = 0 Do While i < s.Length If s(i).Length < 64 Then If i < _innerArray.Length Then _innerArray(i) = s(i) End If Else Throw New DicomException("Length of family name exceeds 64 characters.") End If i += 1 Loop Dim k As Integer = i Do While k < _innerArray.Length _innerArray(k) = String.Empty k += 1 Loop End If End Set Get If _fullName = String.Empty Then _fullName = _innerArray(0) Dim isNotNull As Boolean = _fullName <> String.Empty Dim i As Integer = 1 Do While isNotNull AndAlso i < _innerArray.Length isNotNull = _innerArray(i) <> String.Empty If isNotNull Then _fullName &= "^" & _innerArray(i) End If i += 1 Loop End If Return _fullName End Get End Property ''' Creates a new empty person name instance. Public Sub New() End Sub ''' Creates a new person name instance from specified full name. ''' All person name parts have to be separated by "^" according to ''' the DICOM standard. Public Sub New(ByVal fullNameIn As String) FullName = fullNameIn End Sub ''' Creates a new person name instance from the different person name parts. Public Sub New(ByVal familyNameIn As String, ByVal givenNameIn As String, ByVal middleNameIn As String, ByVal namePrefixIn As String, ByVal nameSuffixIn As String) FamilyName = familyNameIn GivenName = givenNameIn MiddleName = middleNameIn NamePrefix = namePrefixIn NameSuffix = nameSuffixIn End Sub ''' Return this person name instance's <see cref="FullName" />. Public Overrides Function ToString() As String Return FullName End Function End Class Private Sub DumpPersonName(ByVal pn As PersonName) Dim sMsg As String = String.Format("Family Name: {0}" & Constants.vbLf & "Given Name: {1}" & Constants.vbLf & "Middle Name: {2}" & Constants.vbLf & "Name Prefix: {3}" & Constants.vbLf & "Name Suffix: {4}", pn.FamilyName, pn.GivenName, pn.MiddleName, pn.NamePrefix, pn.NameSuffix) MessageBox.Show(sMsg) End Sub Public Function MyGetValueDelegate(ByVal s As String) As Object Dim pn As PersonName = New PersonName(s) MyGetValueDelegate = pn End Function Private Sub DicomDataSet_GetValueWithDelegateExample() ' Create a DicomDataSet and add a PatientName ' Dicom Spec for Value Representation PN (Person Name) ' Elements are in this order: ' * family name complex ' * given name complex ' * middle name ' * name prefix ' * name suffix. Dim ds As DicomDataSet = New DicomDataSet() ds.InsertElementAndSetValue(DicomTag.PatientName, "Smith^John^MiddleName^Mr.^III") ' Get a PersonName value of an element by specifying a tag, and using a delegate ' Use this form when the type is not native to the dataset ' The data is extracted from the field as a string and passed to the provided method. Dim pn As PersonName = Nothing Dim myDelegate As GetValueDelegate myDelegate = AddressOf MyGetValueDelegate pn = ds.GetValue(Of PersonName)(DicomTag.PatientName, Nothing, myDelegate) DumpPersonName(pn) ' Another overload, specifying parent element pn = ds.GetValue(Of PersonName)(Nothing, True, DicomTag.PatientName, Nothing, myDelegate) DumpPersonName(pn) ' Another overload, this time passing in the DICOM element instead of a tag Dim element As DicomElement = ds.FindFirstElement(Nothing, DicomTag.PatientName, True) pn = ds.GetValue(Of PersonName)(element, Nothing, myDelegate) DumpPersonName(pn) End Sub |
C# | Copy Code |
---|---|
/// public class PersonName { private string[] _innerArray = new string[5] {string.Empty, string.Empty, string.Empty, string.Empty, string.Empty }; /// Access this person name instance as array. Index range is /// bounded between 0 (family name) and 4 (name suffix). public string this[int index] { set { if (value == null || value.Length < 64) _innerArray[index] = value; else throw new DicomException("Length of new entry exceeds 64 characters."); } get { return _innerArray[index]; } } private const int _familyNameIndex = 0; private const int _givenNameIndex = 1; private const int _middleNameIndex = 2; private const int _namePrefixIndex = 3; private const int _nameSuffixIndex = 4; /// Access person name part family name. public string FamilyName { set { if (value == null || value.Length < 64) { _fullName = null; _innerArray[_familyNameIndex] = value; } else throw new DicomException("Length of family name exceeds 64 characters."); } get { return _innerArray[_familyNameIndex]; } } /// Access person name part given name. public string GivenName { set { if (value == null || value.Length < 64) { _fullName = string.Empty; _innerArray[_givenNameIndex] = value; } else throw new DicomException("Length of family name exceeds 64 characters."); } get { return _innerArray[_givenNameIndex]; } } /// Access person name part middle name. public string MiddleName { set { if (value == null || value.Length < 64) { _fullName = string.Empty; _innerArray[_middleNameIndex] = value; } else throw new DicomException("Length of family name exceeds 64 characters."); } get { return _innerArray[_middleNameIndex]; } } /// Access person name part name prefix. public string NamePrefix { set { if (value == null || value.Length < 64) { _fullName = string.Empty; _innerArray[_namePrefixIndex] = value; } else throw new DicomException("Length of family name exceeds 64 characters."); } get { return _innerArray[_namePrefixIndex]; } } /// Access person name part name suffix. public string NameSuffix { set { if (value == null || value.Length < 64) { _fullName = string.Empty; _innerArray[_nameSuffixIndex] = value; } else throw new DicomException("Length of family name exceeds 64 characters."); } get { return _innerArray[_nameSuffixIndex]; } } private string _fullName = string.Empty; /// Access full person name string representation. According /// to the DICOM standard "^" is used as separator of different /// person name parts. public string FullName { set { _fullName = value; if (_fullName != null) { string[] s; int i; if (_fullName.Contains("^")) s = _fullName.Split('^'); else s = _fullName.Split(' '); for (i = 0; i < s.Length; i++) { if (s[i].Length < 64) { if(i<_innerArray.Length) _innerArray[i] = s[i]; } else throw new DicomException("Length of family name exceeds 64 characters."); } for (int k = i; k < _innerArray.Length; k++) _innerArray[k] = string.Empty; } } get { if (_fullName == string.Empty) { _fullName = _innerArray[0]; bool isNotNull = _fullName != string.Empty; int i = 1; while (isNotNull && i < _innerArray.Length) { isNotNull = _innerArray[i] != string.Empty; if (isNotNull) _fullName += "^" + _innerArray[i]; i++; } } return _fullName; } } /// Creates a new empty person name instance. public PersonName() { } /// Creates a new person name instance from specified full name. /// All person name parts have to be separated by "^" according to /// the DICOM standard. public PersonName(string fullName) { FullName = fullName; } /// Creates a new person name instance from the different person name parts. public PersonName(string familyName, string givenName, string middleName, string namePrefix, string nameSuffix) { FamilyName = familyName; GivenName = givenName; MiddleName = middleName; NamePrefix = namePrefix; NameSuffix = nameSuffix; } /// Return this person name instance's <see cref="FullName" />. public override string ToString() { return FullName; } } void DumpPersonName(PersonName pn) { String sMsg = string.Format("Family Name: {0}\nGiven Name: {1}\nMiddle Name: {2}\nName Prefix: {3}\nName Suffix: {4}", pn.FamilyName, pn.GivenName, pn.MiddleName, pn.NamePrefix, pn.NameSuffix); MessageBox.Show(sMsg); } private void DicomDataSet_GetValueWithDelegateExample() { // Create a DicomDataSet and add a PatientName // Dicom Spec for Value Representation PN (Person Name) // Elements are in this order: // * family name complex // * given name complex // * middle name // * name prefix // * name suffix. DicomDataSet ds = new DicomDataSet(); ds.InsertElementAndSetValue(DicomTag.PatientName, "Smith^John^MiddleName^Mr.^III"); // Get a PersonName value of an element by specifying a tag, and using a delegate // Use this form when the type is not native to the dataset // The data is extracted from the field as a string and passed to the provided method. PersonName pn = null; pn = ds.GetValue<PersonName>( DicomTag.PatientName, null, delegate(string data) { PersonName t = new PersonName(data); return t; } ); DumpPersonName(pn); // Another overload, specifying parent element pn = ds.GetValue<PersonName>( null, true, DicomTag.PatientName, null, delegate(string data) { PersonName t = new PersonName(data); return t; } ); DumpPersonName(pn); // Another overload, this time passing in the DICOM element instead of a tag DicomElement element = ds.FindFirstElement(null, DicomTag.PatientName, true); pn = ds.GetValue<PersonName>( element, null, delegate(string data) { PersonName t = new PersonName(data); return t; } ); DumpPersonName(pn); } |
SilverlightCSharp | Copy Code |
---|---|
public class PersonName { private string[] _innerArray = new string[5] {string.Empty, string.Empty, string.Empty, string.Empty, string.Empty }; /// Access this person name instance as array. Index range is /// bounded between 0 (family name) and 4 (name suffix). public string this[int index] { set { if (value == null || value.Length < 64) _innerArray[index] = value; else throw new DicomException("Length of new entry exceeds 64 characters."); } get { return _innerArray[index]; } } private const int _familyNameIndex = 0; private const int _givenNameIndex = 1; private const int _middleNameIndex = 2; private const int _namePrefixIndex = 3; private const int _nameSuffixIndex = 4; /// Access person name part family name. public string FamilyName { set { if (value == null || value.Length < 64) { _fullName = null; _innerArray[_familyNameIndex] = value; } else throw new DicomException("Length of family name exceeds 64 characters."); } get { return _innerArray[_familyNameIndex]; } } /// Access person name part given name. public string GivenName { set { if (value == null || value.Length < 64) { _fullName = string.Empty; _innerArray[_givenNameIndex] = value; } else throw new DicomException("Length of family name exceeds 64 characters."); } get { return _innerArray[_givenNameIndex]; } } /// Access person name part middle name. public string MiddleName { set { if (value == null || value.Length < 64) { _fullName = string.Empty; _innerArray[_middleNameIndex] = value; } else throw new DicomException("Length of family name exceeds 64 characters."); } get { return _innerArray[_middleNameIndex]; } } /// Access person name part name prefix. public string NamePrefix { set { if (value == null || value.Length < 64) { _fullName = string.Empty; _innerArray[_namePrefixIndex] = value; } else throw new DicomException("Length of family name exceeds 64 characters."); } get { return _innerArray[_namePrefixIndex]; } } /// Access person name part name suffix. public string NameSuffix { set { if (value == null || value.Length < 64) { _fullName = string.Empty; _innerArray[_nameSuffixIndex] = value; } else throw new DicomException("Length of family name exceeds 64 characters."); } get { return _innerArray[_nameSuffixIndex]; } } private string _fullName = string.Empty; /// Access full person name string representation. According /// to the DICOM standard "^" is used as separator of different /// person name parts. public string FullName { set { _fullName = value; if (_fullName != null) { string[] s; int i; if (_fullName.Contains("^")) s = _fullName.Split('^'); else s = _fullName.Split(' '); for (i = 0; i < s.Length; i++) { if (s[i].Length < 64) { if (i < _innerArray.Length) _innerArray[i] = s[i]; } else throw new DicomException("Length of family name exceeds 64 characters."); } for (int k = i; k < _innerArray.Length; k++) _innerArray[k] = string.Empty; } } get { if (_fullName == string.Empty) { _fullName = _innerArray[0]; bool isNotNull = _fullName != string.Empty; int i = 1; while (isNotNull && i < _innerArray.Length) { isNotNull = _innerArray[i] != string.Empty; if (isNotNull) _fullName += "^" + _innerArray[i]; i++; } } return _fullName; } } /// Creates a new empty person name instance. public PersonName() { } /// Creates a new person name instance from specified full name. /// All person name parts have to be separated by "^" according to /// the DICOM standard. public PersonName(string fullName) { FullName = fullName; } /// Creates a new person name instance from the different person name parts. public PersonName(string familyName, string givenName, string middleName, string namePrefix, string nameSuffix) { FamilyName = familyName; GivenName = givenName; MiddleName = middleName; NamePrefix = namePrefix; NameSuffix = nameSuffix; } /// Return this person name instance's <see cref="FullName" />. public override string ToString() { return FullName; } } void DumpPersonName(PersonName pn) { String sMsg = string.Format("Family Name: {0}\nGiven Name: {1}\nMiddle Name: {2}\nName Prefix: {3}\nName Suffix: {4}", pn.FamilyName, pn.GivenName, pn.MiddleName, pn.NamePrefix, pn.NameSuffix); Debug.WriteLine(sMsg); } private void DicomDataSet_GetValueWithDelegateExample() { // Create a DicomDataSet and add a PatientName // Dicom Spec for Value Representation PN (Person Name) // Elements are in this order: // * family name complex // * given name complex // * middle name // * name prefix // * name suffix. DicomDataSet ds = new DicomDataSet(); ds.InsertElementAndSetValue(DicomTag.PatientName, "Smith^John^MiddleName^Mr.^III"); // Get a PersonName value of an element by specifying a tag, and using a delegate // Use this form when the type is not native to the dataset // The data is extracted from the field as a string and passed to the provided method. PersonName pn = null; pn = ds.GetValue<PersonName>( DicomTag.PatientName, null, delegate(string data) { PersonName t = new PersonName(data); return t; } ); DumpPersonName(pn); // Another overload, specifying parent element pn = ds.GetValue<PersonName>( null, true, DicomTag.PatientName, null, delegate(string data) { PersonName t = new PersonName(data); return t; } ); DumpPersonName(pn); // Another overload, this time passing in the DICOM element instead of a tag DicomElement element = ds.FindFirstElement(null, DicomTag.PatientName, true); pn = ds.GetValue<PersonName>( element, null, delegate(string data) { PersonName t = new PersonName(data); return t; } ); DumpPersonName(pn); } |
SilverlightVB | Copy Code |
---|---|
Public Class PersonName Private _innerArray As String() = New String(4) {String.Empty, String.Empty, String.Empty, String.Empty, String.Empty } ''' Access this person name instance as array. Index range is ''' bounded between 0 (family name) and 4 (name suffix). Public Default Property Item(ByVal index As Integer) As String Set If Value Is Nothing OrElse Value.Length < 64 Then _innerArray(index) = Value Else Throw New DicomException("Length of new entry exceeds 64 characters.") End If End Set Get Return _innerArray(index) End Get End Property Private Const _familyNameIndex As Integer = 0 Private Const _givenNameIndex As Integer = 1 Private Const _middleNameIndex As Integer = 2 Private Const _namePrefixIndex As Integer = 3 Private Const _nameSuffixIndex As Integer = 4 ''' Access person name part family name. Public Property FamilyName() As String Set If Value Is Nothing OrElse Value.Length < 64 Then _fullName = Nothing _innerArray(_familyNameIndex) = Value Else Throw New DicomException("Length of family name exceeds 64 characters.") End If End Set Get Return _innerArray(_familyNameIndex) End Get End Property ''' Access person name part given name. Public Property GivenName() As String Set If Value Is Nothing OrElse Value.Length < 64 Then _fullName = String.Empty _innerArray(_givenNameIndex) = Value Else Throw New DicomException("Length of family name exceeds 64 characters.") End If End Set Get Return _innerArray(_givenNameIndex) End Get End Property ''' Access person name part middle name. Public Property MiddleName() As String Set If Value Is Nothing OrElse Value.Length < 64 Then _fullName = String.Empty _innerArray(_middleNameIndex) = Value Else Throw New DicomException("Length of family name exceeds 64 characters.") End If End Set Get Return _innerArray(_middleNameIndex) End Get End Property ''' Access person name part name prefix. Public Property NamePrefix() As String Set If Value Is Nothing OrElse Value.Length < 64 Then _fullName = String.Empty _innerArray(_namePrefixIndex) = Value Else Throw New DicomException("Length of family name exceeds 64 characters.") End If End Set Get Return _innerArray(_namePrefixIndex) End Get End Property ''' Access person name part name suffix. Public Property NameSuffix() As String Set If Value Is Nothing OrElse Value.Length < 64 Then _fullName = String.Empty _innerArray(_nameSuffixIndex) = Value Else Throw New DicomException("Length of family name exceeds 64 characters.") End If End Set Get Return _innerArray(_nameSuffixIndex) End Get End Property Private _fullName As String = String.Empty ''' Access full person name string representation. According ''' to the DICOM standard "^" is used as separator of different ''' person name parts. Public Property FullName() As String Set _fullName = Value If Not _fullName Is Nothing Then Dim s As String() Dim i As Integer If _fullName.Contains("^") Then s = _fullName.Split("^"c) Else s = _fullName.Split(" "c) End If i = 0 Do While i < s.Length If s(i).Length < 64 Then If i < _innerArray.Length Then _innerArray(i) = s(i) End If Else Throw New DicomException("Length of family name exceeds 64 characters.") End If i += 1 Loop Dim k As Integer = i Do While k < _innerArray.Length _innerArray(k) = String.Empty k += 1 Loop End If End Set Get If _fullName = String.Empty Then _fullName = _innerArray(0) Dim isNotNull As Boolean = _fullName <> String.Empty Dim i As Integer = 1 Do While isNotNull AndAlso i < _innerArray.Length isNotNull = _innerArray(i) <> String.Empty If isNotNull Then _fullName &= "^" & _innerArray(i) End If i += 1 Loop End If Return _fullName End Get End Property ''' Creates a new empty person name instance. Public Sub New() End Sub '' Creates a new person name instance from specified full name. '' All person name parts have to be separated by "^" according to '' the DICOM standard. Public Sub New(ByVal fullNameParam As String) FullName = fullNameParam End Sub '' Creates a new person name instance from the different person name parts. Public Sub New(ByVal familyNameParam As String, ByVal givenNameParam As String, ByVal middleNameParam As String, ByVal namePrefixParam As String, ByVal nameSuffixParam As String) FamilyName = familyNameParam GivenName = givenNameParam MiddleName = middleNameParam NamePrefix = namePrefixParam NameSuffix = nameSuffixParam End Sub ''' Return this person name instance's <see cref="FullName" />. Public Overrides Function ToString() As String Return FullName End Function End Class Private Sub DumpPersonName(ByVal pn As PersonName) Dim sMsg As String = String.Format("Family Name: {0}" & Constants.vbLf & "Given Name: {1}" & Constants.vbLf & "Middle Name: {2}" & Constants.vbLf & "Name Prefix: {3}" & Constants.vbLf & "Name Suffix: {4}", pn.FamilyName, pn.GivenName, pn.MiddleName, pn.NamePrefix, pn.NameSuffix) Debug.WriteLine(sMsg) End Sub Private Function GetValueDelegate(ByVal data As String) As PersonName Dim t As PersonName = New PersonName(data) Return t End Function Private Sub DicomDataSet_GetValueWithDelegateExample() ' Create a DicomDataSet and add a PatientName ' Dicom Spec for Value Representation PN (Person Name) ' Elements are in this order: ' * family name complex ' * given name complex ' * middle name ' * name prefix ' * name suffix. Dim ds As DicomDataSet = New DicomDataSet() ds.InsertElementAndSetValue(DicomTag.PatientName, "Smith^John^MiddleName^Mr.^III") ' Get a PersonName value of an element by specifying a tag, and using a delegate ' Use this form when the type is not native to the dataset ' The data is extracted from the field as a string and passed to the provided method. Dim pn As PersonName = Nothing pn = ds.GetValue(Of PersonName)(DicomTag.PatientName, Nothing, AddressOf GetValueDelegate) DumpPersonName(pn) ' Another overload, specifying parent element pn = ds.GetValue(Of PersonName)(Nothing, True, DicomTag.PatientName, Nothing, AddressOf GetValueDelegate) DumpPersonName(pn) ' Another overload, this time passing in the DICOM element instead of a tag Dim element As DicomElement = ds.FindFirstElement(Nothing, DicomTag.PatientName, True) pn = ds.GetValue(Of PersonName)(element, Nothing, AddressOf GetValueDelegate) DumpPersonName(pn) End Sub |
This delegate is used with certain overloads of DicomDataSet.GetValue<T>.
The delegate takes a string as input, and converts it into any desired class type. It is used with the DicomDataSet.GetValue<T> that take GetValueDelegate parameter.
Target Platforms: Silverlight 3.0, Windows XP, Windows Server 2003 family, Windows Server 2008 family, Windows Vista, Windows 7, MAC OS/X (Intel Only)