void OnShowDlg(GXActionArgs arg, GXDLMSTargetObjectDlg dlg, GXDLMSTarget it)
 {
     if (InvokeRequired)
     {
         BeginInvoke(new ShowDlgEventHandler(OnShowDlg), arg, dlg, it).AsyncWaitHandle.WaitOne();
     }
     else
     {
         bool                   remove = false;
         ListViewItem           li     = null;
         GXDLMSParameterMonitor target = Target as GXDLMSParameterMonitor;
         if (it == null)
         {
             remove = true;
             if (ParametersLV.SelectedItems.Count != 1)
             {
                 arg.Handled = true;
                 return;
             }
             else
             {
                 li         = ParametersLV.SelectedItems[0];
                 it         = (GXDLMSTarget)li.Tag;
                 dlg.Target = it.Target;
                 dlg.Index  = it.AttributeIndex;
             }
         }
         if (dlg.ShowDialog(this) == DialogResult.OK)
         {
             if (!remove)
             {
                 it.Target         = dlg.Target;
                 it.AttributeIndex = dlg.Index;
                 li = ParametersLV.Items.Add(it.Target.ToString());
                 li.SubItems.Add(it.AttributeIndex.ToString());
                 li.Tag    = it;
                 arg.Value = target.Insert(arg.Client, it);
             }
             else
             {
                 arg.Value = target.Delete(arg.Client, it);
                 li.Remove();
             }
         }
         else
         {
             arg.Handled = true;
         }
     }
 }
 public void PreAction(GXActionArgs arg)
 {
     if (arg.Action == ActionType.Action)
     {
         if (arg.Index == 1)
         {
             GXDLMSTarget          item = new GXDLMSTarget();
             GXDLMSTargetObjectDlg dlg  = new GXDLMSTargetObjectDlg("Add new target", item.Target, item.AttributeIndex, Target.Parent);
             OnShowDlg(arg, dlg, item);
         }
         else if (arg.Index == 2)
         {
             GXDLMSTargetObjectDlg dlg = new GXDLMSTargetObjectDlg("Remove target", null, 0, null);
             OnShowDlg(arg, dlg, null);
         }
     }
 }