【问题标题】:C# -Does it have a thing like jquery handle classhtml in C# winform/webform?C# - 在 C# winform/webform 中是否有类似 jquery handle classhtml 的东西?
【发布时间】:2019-08-07 21:55:31
【问题描述】:

我来自 Web 开发,遇到一个使用 ASP.NET 网络表单和 C# 窗口表单的项目 那么请问你,代码下面有没有类似jquery的东西?

$(".classinput").hide();

我可以在 formcontrol 中有一个类似于 htmlclass 的东西吗?我想使用可能的最短代码隐藏所有目标文本框 谢谢:)

【问题讨论】:

  • 你可以循环抛出这些控件并使用control.Visible = false;

标签: c# jquery asp.net winforms webforms


【解决方案1】:

为时已晚。但它就在这里。 :)

一开始没有简单的方法来实现它。但是我们可以构建功能并使用它。 :)

你可以使用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);
        }
    }

样本输出


【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    相关资源
    最近更新 更多