在一个类中设置变量并将值返回给另一类

时间:2018-08-04 20:49:12

标签: c# winforms variables boolean

我正在学习C#,并试图创建一个public bool类变量,该变量的值将在一个类中设置,然后传递回调用类。我尝试了下面的代码,但是即使逐步执行代码,布尔值仍返回<{1}时仍为 ALWAYS 为false,即使在我的课程VerifyForm中,值已正确设置。

对于经验更丰富的C#winforms程序员,我应该如何编写此代码,以便正确设置变量IntelOrNo的值并在类之间传递?

rttam

2 个答案:

答案 0 :(得分:0)

您可以通过构造函数将类引用传递到部分类中,然后以这种方式返回变量,尽管我不确定从该代码段中您尝试访问VerifyForm类中的rttam。

当前可能不起作用的原因是因为您正在创建类的多个实例。在IntelOrNo类中,您声明一个 new VerifyForm类,这将创建该类的全新实例,并且引用您原来拥有的类。

当前,您的代码正在执行此操作:

  1. 创建VerifyForm的新实例
  2. 创建IntelOrNo的新实例
  3. 创建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
}