gpt4 book ai didi

C#:尝试在不同类中使用控制元素 - "object reference is required"

转载 作者:行者123 更新时间:2023-11-30 13:44:30 26 4
gpt4 key购买 nike

我是 C# 的新手(如果我的问题很幼稚,我深表歉意 - 我是自学,所以这是一个坎坷的过程)。我正在尝试开发一个 winform,并且由于某些方法很长,所以我试图将它保留在几个类中。这就是我希望实现的目标:

public partial class formMainForm : Form
{
public formMainForm()
{
InitializeComponent();
}

private void UpDown1_ValueChanged(object sender, EventArgs e)
{
longCalculations.LongMethod1();
}
}

public class longCalculations
{
private void LongMethod1()
{
// Arbitrarily long code goes here
}
}

我这样做是为了保持 formMainForm 类整洁,并能够将任何计算拆分为可管理的 block 。但是,我在非表单类中使用表单控件(例如复选框、数字上下控件等)时遇到问题。

如果我让它们保持原样(例如 CheckBox1),我会得到一个当前上下文中不存在的名称错误。我四处搜索,发现这是因为那个盒子是在不同的类中定义的。但是,如果我将其更改为 formMainForm.CheckBox1,则错误现在是非静态字段、方法或属性需要对象引用。再一次,我环顾四周,看来这是由于表单初始化方法不是静态的。

如果我将 public formMainForm() 更改为 static formMainForm(),错误现在将移至 InitializeComponent(); 而我不会知道从这里去哪里。我还尝试对 formMainForm() 方法进行实例化,但这并没有做任何事情(我尝试使用的代码在下面。我在这个网站的某个地方找到了它作为对类似问题的回答问题)。

private void formLoader(object sender, EventArgs e)
{
shadowrunMainForm runForm = new shadowrunMainForm();
runForm.Show();
}

如何在其他类中使用表单控件名称?

附言这是我在这里的第一篇文章 - 如果我错过了这个已经在某处被问到的问题,我非常抱歉。我确实进行了搜索,但没有找到我要找的东西。

编辑

看来我没有说清楚 - 这只是一个代码示例,我的问题是第二类,而不是第一类。我现在已将代码简化为:

public partial class formMainForm : Form
{
public formMainForm()
{
InitializeComponent();
}
}

public class longCalculations
{
private void LongMethod1()
{
List<CheckBox> listOfBoxes = new List<CheckBox>();
listOfBoxes.Add(CheckBox1);
// The code displays an "object reference is required for the non-static field, method or property" error at this stage. Changing the "CheckBox1" to formMainForm.CheckBox1 doesn't help
// Arbitrarily long code goes here
}
}

LongMethod1 放置在 formMainForm 部分类中时工作得很好。将其移至其他表单使其无法从这些复选框中获取数据。

最佳答案

我相信这行 longCalculations.LongMethod1(); 会抛出错误,因为您正在尝试访问实例方法,就好像它是一个 static 方法一样,并且它已定义作为 private 方法,在类之外无法访问。在访问它的任何成员或方法之前,您需要创建一个 longCalculations 类的实例,并将该方法标记为 public

private void UpDown1_ValueChanged(object sender, EventArgs e)
{
longCalculations ln = new longCalculations();
ln.LongMethod1();
}

public class longCalculations
{
public void LongMethod1()
{
// Arbitrarily long code goes here
}
}

(或)如果您真的希望它是一个static 方法,那么使用static 修饰符相应地定义

public class longCalculations
{
public static void LongMethod1()
{
// Arbitrarily long code goes here
}
}

现在你可以像你尝试的那样调用它了

关于C#:尝试在不同类中使用控制元素 - "object reference is required",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38309444/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com