为时已晚。但它就在这里。 :)
一开始没有简单的方法来实现它。但是我们可以构建功能并使用它。 :)
你可以使用C#的IExtenderProviderinterface。
GroupNameExtender
[ProvideProperty("GroupName", typeof(Control))]
public class GroupNameExtender : Component, IExtenderProvider
{
private Hashtable groupNameValues = new Hashtable();
private List<KeyValuePair<string, List<Control>>> groupControls = new List<KeyValuePair<string, List<Control>>>();
public bool CanExtend(object extendee)
{
return (extendee is TextBox && !(extendee is Form));
}
public string GetGroupName(Control control)
{
if (groupNameValues.ContainsKey(control))
return (string)groupNameValues[control];
return null;
}
public void SetGroupName(Control control, string value)
{
if (string.IsNullOrEmpty(value))
{
groupNameValues.Remove(control);
}
else
{
groupNameValues[control] = value;
var kv = groupControls.Where(item => item.Key == value).FirstOrDefault();
var isNewGroup = kv.Equals(default(KeyValuePair<string, List<Control>>));
if (isNewGroup)
{
kv = new KeyValuePair<string, List<Control>>(value, new List<Control>());
}
kv.Value.Add(control);
if (isNewGroup)
{
groupControls.Add(kv);
}
}
}
public void HideGroup(string name)
{
var controls = getGroupControls(name);
if (controls != null)
{
controls.Select(c => { c.Visible = false; return c; }).ToList();
}
}
public void ShowGroup(string name)
{
var controls = getGroupControls(name);
if (controls != null)
{
controls.Select(c => { c.Visible = true; return c; }).ToList();
}
}
public bool IsGroupVisible(string name)
{
var controls = getGroupControls(name);
return controls.FirstOrDefault().Visible;
}
private List<Control> getGroupControls(string name)
{
return groupControls.Where(kv => kv.Key == name).FirstOrDefault().Value;
}
一旦有了扩展器,它就会在工具箱中创建一个控件。您可以在每个表单上使用它。
一旦扩展器控件出现在您的表单中。除表单之外的所有控件都将具有一个新属性,您可以在其中设置 GroupName。
实施背后的代码
private void Form1_Load(object sender, EventArgs e)
{
groupNameExtender1.HideGroup("Group1");
}
private void button1_Click(object sender, EventArgs e)
{
var group1 = "Group1";
var group2 = "Group2";
if (groupNameExtender1.IsGroupVisible(group1))
{
groupNameExtender1.HideGroup(group1);
}
else
{
groupNameExtender1.ShowGroup(group1);
}
if (groupNameExtender1.IsGroupVisible(group2))
{
groupNameExtender1.HideGroup(group2);
}
else
{
groupNameExtender1.ShowGroup(group2);
}
}
样本输出