【问题标题】:Error CS0120: An object reference is required for the non-static field, method, or property 'Control.Controls' [duplicate]错误 CS0120:非静态字段、方法或属性“Control.Controls”需要对象引用 [重复]
【发布时间】:2019-12-29 03:23:02
【问题描述】:

我收到此错误。我尝试创建控件实例但没有成功。有人可以帮帮我吗?

错误 CS0120 非静态字段、方法或属性“Control.Controls”需要对象引用

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        static void Main(string[] args)
        {
            foreach (var button in Form1.Controls.OfType<Button>())
            {

            }
        }
    }

【问题讨论】:

  • 你到底想做什么?
  • 您将控制台应用程序中使用的代码与 WinForms 中使用的代码混合在一起。可以在Program.cs中找到static void Main(),很少用于UI相关的操作。您应该在这里描述您实际想要完成的工作。如果您尝试获取/设置作为当前 Form 子级的所有 Button 的属性,OnLoad 方法覆盖(或类方法委托)是更好的选择。
  • 嗯,我正在尝试让按钮的文本在每次窗口窗体应用程序发生变化时自动调整大小。
  • 使按钮的文本自动调整大小是什么意思?更改 Font.Size(使用更大/更小的字体大小)? 窗口形式有什么变化?何时调整表单大小?您是否尝试过锚定按钮?它不会更改字体大小,但会调整按钮的大小,无需进一步编码。或者将按钮添加到 TableLayoutPanel 的单元格中,设置按钮的 Dock 属性(例如,[Button].Dock = Fill)。
  • 我的意思是当用户单击顶部的矩形按钮最大化或恢复窗口大小时,我真的希望框中的文本根据窗口改变大小。单独使用 TableLayoutPanel 只会更改按钮,但不会更改里面的文本...

标签: c# visual-studio winforms


【解决方案1】:

首先Form1static Main的目的是什么

你也需要改变这一行

var form1 = new From1();

foreach (var button in form1.Controls.OfType<Button>())

或者如果你想在 Form1 类中访问它

foreach (var button in this.Controls.OfType<Button>())

无论如何,以上所有代码都应该是静态方法。

【讨论】:

  • 很好,错误消失了,但代码没有按我想要的方式工作。每次窗口表单应用程序发生更改时,我都会尝试使按钮的文本自动调整大小。这是我第一次用 c# 编写一个 winform 应用程序,所以有些东西我看不懂哈哈。
  • 他没有回答你的问题吗?
猜你喜欢
  • 1970-01-01
  • 2023-03-13
  • 2021-09-21
  • 1970-01-01
  • 2022-11-10
  • 2019-06-22
  • 1970-01-01
  • 2016-05-13
相关资源
最近更新 更多