调用方法与表单组件交互

时间:2015-05-05 15:49:29

标签: c#

编辑:使用表单实例似乎表示原始表单没有受到影响。因此,来自Form1.cs的代码勾选该框,以便按钮单击不会在其运行时生成其他进程。如果在另一个方法中(在另一个类中),我会对表单的新实例调用UncheckDieboldBox - 好吧,该实例中的框已经取消选中,因为它是Form1的完全独立的实例。我确定我在这里无知,但我不明白如何创建表单的新实例是最常见的答案,通常我会想象人们想要使用现有的用户已与之交互的表单实例。

我见过类似的线程,但到目前为止还没有找到可行的解决方案。我正在使用隐藏的复选框来允许或禁止按下按钮以启动漫长的过程。 Form1.cs包括:

private void btnGenDieboldXML_Click(object sender, EventArgs e)
    {
        Font thisMICRFont = UseMICRFont(18);

        if (cbDieboldRunning.Checked)
        {
            MessageBox.Show("Process is already running", "Error");
            return;
        }

        else
        {
            try
            {
                cbDieboldRunning.Checked = true;
                pBarDieboldGen.Value = 0;
                Task.Factory.StartNew(() => DieboldGen.CreateDiebold.aReadFile(inputPathDieboldRAW.Text, thisMICRFont, inputPathDieboldRAW.Text));
            }


            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Exception");
            }

        }

    }

    public void UncheckDieboldBox()
    {
        cbDieboldRunning.Checked = false;
    }

当Task.Factory调用的方法完成后,最后一步是执行以下命令调用UncheckDieboldBox

Form1.UncheckDieboldBox();

我得到“非静态字段,方法或属性'{class} .Form1.UncheckDieboldBox()'”需要对象引用。作为一个快速修复,我尝试将方法设置为public static void,但这只是将错误移动到{class} .Form1.cbDieboldRunning复选框表单元素 - 显然无法解决问题。

我应该怎么做才能取消选中隐藏的盒子?我确信还有其他方法可以用全局变量等来做这个,但这些类型的调用对我来说实际上有点混乱,所以解决这个问题可能有助于我解决其他一些小问题我遇到了。

谢谢!

编辑:我实际上看过这个帖子应该是重复的,但那里的解决方案不起作用(因此我创建了一个新问题)。

当我从调用方法中使用它时:

        Form1 frm1 = new Form1();
        frm1.UncheckDieboldBox();

我反而得到两个新错误:

使用实例引用无法访问成员{class} .Form1.UncheckDieboldBox();用类型名称来限定它。

- 和 -

{class}上的非静态字段,方法或属性需要对象引用.Form1.cbDieboldRunning

所以第二个错误就像我将被调用的方法设置为static一样,第一个错误是全新的。要么我错过了链接线程回答所说的一小段内容,要么整个解决方案在这种情况下根本不起作用。

0 个答案:

没有答案