ASP.NET编写组件控件实例:多列下拉框和鼠标相关组件(4)
该接口的实现如下:
Code
/// <summary>
/// 不响应操作的控件的列表
/// </summary>
private List<Control> m_NoHandleControls = new List<Control>();
/// <summary>
/// IExtenderProvider成员方法-是否可扩展
/// </summary>
public bool CanExtend(object extendee)
{
if (m_HandleControl != null && IsContainSubControl(m_HandleControl, extendee as Control))
return true;
else
return false;
}
/// <summary>
/// 是否包含下级控件
/// </summary>
/// <param name="Parent">上级控件</param>
/// <param name="Child">下级控件</param>
/// <returns></returns>
private bool IsContainSubControl(Control Parent, Control Child)
{
bool blnResult = false;
if (Parent == null || Child == null)
blnResult = false;
else
{
if (Parent.Controls.Contains(Child))
blnResult = true;
else
{
foreach (Control item in Parent.Controls)
{
if (IsContainSubControl(item, Child))
{
blnResult = true;
break;
}
}
}
}
return blnResult;
}
/// <summary>
/// IExtenderProvider成员方法-设置响应移动属性
/// </summary>
public void SetHandleMove(Control control, bool value)
{
if (value)
{
if (m_NoHandleControls.Contains(control))
m_NoHandleControls.Remove(control);
}
else
{
if (!m_NoHandleControls.Contains(control))
m_NoHandleControls.Add(control);
}
}
/// <summary>
/// 成员方法-获取响应移动属性
/// </summary>
[DefaultValue(true)]
[Description("指示控件是否响应改变位置操作。")]
public bool GetHandleMove(Control control)
{
if (m_HandleControl != null && (control == this.m_HandleControl || IsContainSubControl(m_HandleControl, control)))
{
if (this.m_NoHandleControls.Contains(control))
return false;
else
return true;
}
else
return false;
}