我正在学习C#,并试图创建一个public bool
类变量,该变量的值将在一个类中设置,然后传递回调用类。我尝试了下面的代码,但是即使逐步执行代码,布尔值仍返回<{1}时仍为 ALWAYS 为false,即使在我的课程VerifyForm
中,值已正确设置。
对于经验更丰富的C#winforms程序员,我应该如何编写此代码,以便正确设置变量IntelOrNo
的值并在类之间传递?
rttam
答案 0 :(得分:0)
您可以通过构造函数将类引用传递到部分类中,然后以这种方式返回变量,尽管我不确定从该代码段中您尝试访问VerifyForm类中的rttam。
当前可能不起作用的原因是因为您正在创建类的多个实例。在IntelOrNo类中,您声明一个 new VerifyForm类,这将创建该类的全新实例,并且不引用您原来拥有的类。
当前,您的代码正在执行此操作:
您将无法通过第二个VerifyForm将变量传递到第一个VerifyForm中,因为它们是不同的类。
使用 this 关键字返回到可能的修复方法,您可以将第一个VerifyForm传递给IntelOrNo并从那里进行访问。
using System;
using System.Windows.Forms;
namespace CTX
{
public partial class VerifyForm : Form
{
public static IntelOrNo ai = new IntelOrNo(this);//Pass this class as a parameter
public VerifyForm()
{
InitializeComponent();
}
private void btnOkay_Click(object sender, EventArgs e)
{
ai.rttam = true;
this.Close();
}
private void btnNo_Click(object sender, EventArgs e)
{
ai.rttam = false;
this.Close();
}
}
public partial class IntelOrNo : Form
{
public bool rttam = false;
private VerifyForm parent
public IntelOrNo(VerifyForm _parent)
{
parent = _parent; //Sets the private parent variable to the initial VerifyForm class, from here you can access the initial VerifyForm class through parent.whatever
InitializeComponent();
}
private void btnDoThisWork_Click(object sender, EventArgs e)
{
VerifyForm EH = new VerifyForm(); //This creates a NEW instance of the class, not what you want (I think)
parent.StartPosition = FormStartPosition.CenterParent;
parent.ShowDialog();
if (rttam)
{
}
}
}
}
我希望这会有所帮助,如果我误解了这个问题,请随时澄清,我将尝试再次回答。 :)
答案 1 :(得分:0)
老实说,我只是删除静态变量。并为VerifyForm
类提供一个期望IntelOrNo
形式的构造函数。
using System;
using System.Windows.Forms;
namespace CTX
{
public partial class VerifyForm : Form
{
public IntelOrNo _parent;
public VerifyForm(IntelOrNo parent)
{
_parent = parent;
InitializeComponent();
}
private void btnOkay_Click(object sender, EventArgs e)
{
_parent.rttam = true;
this.Close();
}
private void btnNo_Click(object sender, EventArgs e)
{
_parent.rttam = false;
this.Close();
}
}
public partial class IntelOrNo : Form
{
public bool rttam = false;
public IntelOrNo()
{
InitializeComponent();
}
private void btnDoThisWork_Click(object sender, EventArgs e)
{
VerifyForm EH = new VerifyForm(this);
EH.StartPosition = FormStartPosition.CenterParent;
EH.ShowDialog();
if (rttam)
{
}
}
}
}
或者,如果您真的只想打开是或否对话框,我建议您在MessageBox
事件中使用btnDoThisWork_Click
,就像这样。
DialogResult dialogResult = MessageBox.Show("Do you want to continue?", "Continue?", MessageBoxButtons.YesNo);
if (dialogResult == DialogResult.Yes)
{
//do something
}
else if (dialogResult == DialogResult.No)
{
//do something else
}