编辑:使用表单实例似乎表示原始表单没有受到影响。因此,来自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一样,第一个错误是全新的。要么我错过了链接线程回答所说的一小段内容,要么整个解决方案在这种情况下根本不起作用。