c#方法不会更改公共变量

时间:2016-04-03 19:43:21

标签: c# variables methods

我的公共方法中的变量存在问题而不更改变量。该方法执行除了更改变量的位之外的所有内容。

这是我的主要形式:

namespace Multi_tool
{
    public partial class startForm : Form
    {
        public string quantity;
        public string value;
        public string unit;

        public void startInmForm(string _quantity,string _unit)
        {
            //Here I think something is wrong
            quantity = _quantity;
            unit = _unit;

            inmForm inmForm = new inmForm();
            inmForm.ShowDialog();
        }

后来我打电话给方法:

        private void btnVelocity_Click(object sender, EventArgs e)
        {
            startInmForm("Velocity", "m/s");
        }

另一种形式我有这个代码:

namespace Multi_tool
{
    public partial class inmForm : Form
    {
        public inmForm()
        {
            InitializeComponent();
        }

        private void inmForm_Load(object sender, EventArgs e)
        {
            startForm startForm = new startForm();

            lblQuantity.Text = startForm.quantity;
            lblUnit.Text = startForm.unit;
        }

它(inmForm)是一个带有两个标签和中间文本框的表单,应在文本框中键入一个值。标签应该有文字" Velocity"和" m / s",但它们是空的。那是为什么?

如果我在声明时将文字分配给quantityunit,则该文字会显示在第二个表单(inmForm)的标签上。

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

执行new startForm()时,您创建了一个新实例而不使用现有实例。 您需要在调用ShowDialog之前将参数从startForm发送到inmForm。 (财产或建筑师)

public partial class inmForm : Form
{
    private startForm _startForm;
    public inmForm(startForm startForm)
    {
        _startForm = startForm;
        InitializeComponent();
    }

    private void inmForm_Load(object sender, EventArgs e)
    {
        lblQuantity.Text = _startForm.quantity;
        lblUnit.Text = _startForm.unit;
    }
}
in startInmForm

public void startInmForm(string _quantity,string _unit)
{
    //Here I think something is wrong
    quantity = _quantity;
    unit = _unit;

    inmForm inmForm = new inmForm(this);
    inmForm.ShowDialog();
}

答案 1 :(得分:0)

这是问题所在:

    private void inmForm_Load(object sender, EventArgs e)
    {
        startForm startForm = new startForm();

        lblQuantity.Text = startForm.quantity;
        lblUnit.Text = startForm.unit;
    }

您正在实例化表单并立即将值设置为文本框,此时值仍为空。

试试这个例子:

    private void inmForm_Load(object sender, EventArgs e)
    {
        startForm startForm = new startForm();
        startForm.startInmForm("Velocity", "m/s");
        lblQuantity.Text = startForm.quantity;
        lblUnit.Text = startForm.unit;
    }

作为旁注。尝试用大写来命名你的课程。这样可以更容易区分类和变量。