【问题标题】:how to change size of controls in different panels or forms (winform) c#如何更改不同面板或表单中控件的大小(winform)c#
【发布时间】:2014-09-01 16:59:50
【问题描述】:

我的表单中有一些复选框,其中一些在特定表单的面板中(两个不同的问题)。
我放置了一个按钮,当用户单击该按钮时,所有复选框的大小都应更改(在所有面板和表单中)。

另一个问题是,我怎样才能以编程方式发现我的应用中的控件类型是什么?

感谢您的帮助。
我放置了一个按钮并添加了一个事件处理程序。
为了创建控件的类型,我使用了控件的名称 这是我的尝试:

            foreach (Control ctrl in this.Controls)
                if (ctrl.Name.Contains("combo"))  
                    checkbox1.SetSize = new Size(40,40);

【问题讨论】:

  • 你有没有尝试过?显示您的代码。
  • 第一个问题您目前遇到的问题是什么?您的第二个问题取决于您所需的用途。
  • @Sayse 我只想知道控件的类型。
  • 用它做什么呢?你可以使用GetType(),但是你在用它做什么,因为还有其他可以使用的东西......isasOfType<T>(),泛型......
  • 谢谢。你是对的,这是我忘记的答案。但是我的问题的答案是什么?

标签: c# winforms controls


【解决方案1】:

如果您打算使用一个 Function 来处理多个 OnClick - 事件,您可以从发送方获取来源(发送方是处理程序实现的给定参数)

(如果这是问题,你应该明确你想要做什么并显示你的相关代码)

【讨论】:

    【解决方案2】:

    最简单的方法是使用this extension method 循环所有复选框

    foreach(var checkBox in this.GetAll<CheckBox>())
        checkBox.Size = new Size(40,40);
    

    如果没有这个,你将不得不单独循环面板

    foreach(var panel in this.Controls.OfType<Panel>())
        foreach(var checkbox in panel.Controls.OfType<CheckBox>())
            //set size in panel
    
    foreach(var checkbox in this.Controls.OfType<CheckBox>())
        //set size in form
    

    【讨论】:

    • 扩展方法应该在静态类中定义,那么如何在winform中使用呢?
    • @user3787313 - Extension Methods msdn
    【解决方案3】:

    根据评论更改:

    您可以遍历所有控件以查找所有复选框:

        private void ProcessControls(Control containerControl)
        {
            foreach (Control control in containerControl.Controls)
            {
                if (control is CheckBox)
                {
                    ChangeCheckBoxProperties((CheckBox)control);
                }
                else
                {
                    ProcessControls(control);
                }
            }
        }
    
        private void ChangeCheckBoxProperties(CheckBox cb)
        {
            // ...
        }
    

    您可以为您的主窗体调用此方法。

    请记住,您应该总体上考虑您的方法,因为如果您使用这样的循环,您的解决方案似乎有问题。

    【讨论】:

    • 谢谢。你是对的,这是我忘记的答案。但是我的问题的答案是什么?
    • @user3787313 我已经更新了答案,所以请检查。
    • 小心循环表单上的所有控件,因为它会带来一些性能问题(取决于控件的数量)。
    • 我在一些面板中有复选框,但它们的大小不会改变。那是我的问题。
    猜你喜欢
    • 1970-01-01
    • 2014-12-06
    • 1970-01-01
    • 2015-06-09
    • 2020-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-16
    相关资源
    最近更新 更多