Leadtools.Dicom Requires Medical product license | Send comments on this topic. | Back to Introduction - All Topics | Help Version 16.5.9.25
GetValueDelegate Delegate
See Also  Example
Leadtools.Dicom Namespace : GetValueDelegate Delegate



value
a string representation of the DICOM element value that is to be converted
A delegate used with some overloads of Generic DicomDataSet.GetValue(DicomElement,Boolean,Int64,,GetValueDelegate) to get a value of an element

Syntax

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)
C# 
public delegate object GetValueDelegate( 
   string value
)
C++/CLI 
public delegate Object^ GetValueDelegate( 
   String^ value
)

Parameters

value
a string representation of the DICOM element value that is to be converted

Example

This example will retrieve a value from a data set as a PersonName type using a delegate

Visual BasicCopy 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); 
}

Remarks

Requirements

Target Platforms: Microsoft .NET Framework 3.0, Windows XP, Windows Server 2003 family, Windows Server 2008 family

See Also

Leadtools.Dicom requires a Medical toolkit server license and unlock key. For more information, refer to: Imaging Pro/Document/Medical Features