You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

111 lines
5.3 KiB
C#

1 year ago
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Reflection;
using System.Windows.Forms;
namespace Mesnac.Gui.Edit.Common
{
/// <summary>
/// 删除气力输送带有流动方向的控件
/// </summary>
public class DelIntakeControl
{
public static bool DelControl(Host.HostSurfaceManager _hostSurfaceManager, int comm)
{
try
{
List<string> lstContorl = new List<string>();
List<Component> lst = new List<Component>();
IDesignerHost host = _hostSurfaceManager.ActiveDesignSurface.GetService(typeof(IDesignerHost)) as IDesignerHost;
if (host != null)
{
foreach (Component cmp in host.Container.Components)
{
if (cmp.GetType().BaseType.FullName == "Mesnac.Controls.Intake.IntakeControl")
{
lst.Add(cmp);
}
}
}
#region 删除控件源
System.ComponentModel.Design.ISelectionService ss = host.GetService(typeof(System.ComponentModel.Design.ISelectionService)) as System.ComponentModel.Design.ISelectionService;
if (ss != null)
{
System.Collections.ICollection ic = ss.GetSelectedComponents();
object[] selectedcomp = new object[ic.Count];
ic.CopyTo(selectedcomp, 0);
if (selectedcomp.Length == 1)
{
if (selectedcomp[0].GetType().BaseType.FullName != "Mesnac.Controls.Intake.IntakeControl")
{
return true;
}
Control intakeControl = selectedcomp[0] as Control;
foreach (Component cmp in lst)
{
PropertyInfo[] pi = cmp.GetType().GetProperties();
for (int i = 0; i < pi.Length; i++)
{
if (pi[i].GetCustomAttributesData().Count > 0)
{
if (pi[i].GetCustomAttributesData()[0].ConstructorArguments.Count > 0)
{
if (pi[i].GetCustomAttributesData()[0].ConstructorArguments[0].ToString() == "typeof(Mesnac.Controls.Intake.Base.LinkControlEditor)")
{
if (pi[i].GetValue(cmp, null) != null)
lstContorl.Add(pi[i].GetValue(cmp, null) == null ? "" : pi[i].GetValue(cmp, null).ToString());
}
}
}
}
}
foreach (string item in lstContorl)
{
if (item.IndexOf(intakeControl.Name) >= 0 && comm == 17)
{
DialogResult dlg = MessageBox.Show("系统检测到该控件有被动连接,删除该控件,其被动连接关系将一同删除,确认?", "提示", MessageBoxButtons.OKCancel);
if (dlg == DialogResult.OK)
{
foreach (Component cmp in lst)
{
PropertyInfo[] pi = cmp.GetType().GetProperties();
for (int i = 0; i < pi.Length; i++)
{
if (pi[i].GetCustomAttributesData().Count > 0)
{
if (pi[i].GetCustomAttributesData()[0].ConstructorArguments.Count > 0)
{
if (pi[i].GetCustomAttributesData()[0].ConstructorArguments[0].ToString() == "typeof(Mesnac.Controls.Intake.Base.LinkControlEditor)")
{
if ((pi[i].GetValue(cmp, null) == null ? "" : pi[i].GetValue(cmp, null).ToString()) == item)
pi[i].SetValue(cmp, "", null);
}
}
}
}
}
return true;
}
else
{
return false;
}
}
}
}
}
#endregion
return true;
}
catch (Exception)
{
return true;
}
}
}
}