【问题标题】:Get Changeable Int From Another Form - C# [closed]从另一种形式获取可变 Int - C# [关闭]
【发布时间】:2018-03-16 14:26:11
【问题描述】:

我正在尝试完成一个学校项目,但有些事情没有按照我想要的方式进行。我在网上查了一下,我用了这些方法,还是不行。这是我的代码:

表格 1

private int selected_btns = 0;
ExampleHepler ex = null;

public int GetSelectedButtons
{
    get
    {
        return selected_btns;
    }
}

private void cheese_Click(object sender, EventArgs e)
{
    if (((Control)sender).BackColor == Color.MediumSlateBlue)
    {
        cheese.BackColor = Color.DarkSlateBlue;
        cheese.FlatAppearance.BorderSize = 2;
        selected_btns++;
    }
    else
    {
        cheese.BackColor = Color.MediumSlateBlue;
        cheese.FlatAppearance.BorderSize = 1;
        selected_btns--;
    }
}

private void Form1_Load(object sender, EventArgs e)
{
    ex = new ExampleHelper(this);
}

表格 2

MainApp app = null;
public ExampleHelper(MainApp app1)
{
    app1 = app;
    InitializeComponent();
}

private void ExampleHelper_Load(object sender, EventArgs e)
{
    app = new MainApp();
}

private void button1_Click(object sender, EventArgs e)
{
    MessageBox.Show(app.GetSelectedButtons.ToString());
}

有人可以帮助我吗?谢谢!

【问题讨论】:

  • 有什么错误吗?您如何显示 ExampleHelper 表单
  • 它怎么不能按你想要的方式工作?
  • @UnholySheep,不,它只返回 0,每次我更改该值时它只返回 0
  • minimal reproducible example 请-您的代码中没有任何地方更改值。此外,您只是在单击按钮时读取值,也不会自动更新
  • 好吧,目前的方式是错误的——不管怎样。您正在分配参数 = null。你实例化 app = null,然后设置 app1 = app,然后在加载时,无论如何你都要让 app 成为一个新的 mainapp,它会保持默认值 0。注释掉“app = new MainApp();”在 ExampleHelper_Load 中,我敢打赌它会抛出一个空引用。之后更改app = app1,它可能会起作用。

标签: c# winforms int


【解决方案1】:

您正在 ExampleHelper Form_Load 事件中创建 MainApp 的新实例。此外,当您实例化您的 ExampleHelper 时,您将实例变量分配给传入的 MainApp 变量,而不是正确的方法,将实例变量设置为传入的引用。

所以你有 MainApp1 -> 创建 ExampleHelper -> 创建 MainApp2。 cheeseClicks 在原始 MainApp 实例上递增和递减计数器,但在帮助应用程序中,您正在从新的、未显示的 MainApp 实例打印计数器。

不要试图创建一个新的 MainApp 实例,并且正确地分配变量,你应该得到你想要的结果。

Form2:

MainApp app = null;
public ExampleHelper(MainApp app1)
{
    app = app1; // note the change in order on this line...
    InitializeComponent();
}

private void ExampleHelper_Load(object sender, EventArgs e)
{
}

【讨论】:

  • 谢谢,但我已经在@Aaron 的帮助下解决了这个问题。我删除了 'app = new MainApp();'线。还是谢谢!
  • 你明白为什么它不工作了吗?您基本上是在创建另一个副本,然后引用该新副本,而不是维护对发生点击事件的实际表单的引用。
  • 是的,我明白了。我对这个引用和同一个项目中的多个表单不熟悉。谢谢
猜你喜欢
  • 2017-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-05
  • 2018-02-03
相关资源
最近更新 更多