accessing variables from another method

2019-09-19 14:46发布

问题:

I'm currently trying to access a double from another load form method. Once I change a check box I wish to add/subtract from this variable. I have commented on both the variable and the problem.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;


namespace Virtual_Car_Dealer
{
public partial class BMW : Form
{
    private CarDatabase database;

    public BMW()
    {
        InitializeComponent();
    }

    private void toolStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
    {

    }

    private void picLogo_Click(object sender, EventArgs e)
    {
        var Form1 = new Form1();
        this.Hide();
        Form1.Show();
    }

    private void picLogo_MouseEnter(object sender, EventArgs e)
    {
        picLogo.BorderStyle = BorderStyle.FixedSingle;
        this.Cursor = Cursors.Hand;
    }

    private void picLogo_MouseLeave(object sender, EventArgs e)
    {
        picLogo.BorderStyle = BorderStyle.Fixed3D;
        this.Cursor = Cursors.Default;
    }

    private void BMW_FormClosed(object sender, FormClosedEventArgs e)
    {
        //Needs Work
    }

    private void BMW_Load(object sender, EventArgs e)
    {
        database = new CarDatabase();
        database.Show();
        database.Hide();

        rdbStandard.Checked = true;

        int carID = 0;

        string value = database.dgvBMW.Rows[carID].Cells["ID"].Value.ToString();
        string Model = database.dgvBMW.Rows[carID].Cells["Model"].Value.ToString();
        string Stock = database.dgvBMW.Rows[carID].Cells["Stock"].Value.ToString();
        string Price = database.dgvBMW.Rows[carID].Cells["Price"].Value.ToString();
        string PicLocation = database.dgvBMW.Rows[carID].Cells["Picture Location"].Value.ToString();

        txtCarName.Text = Model;
        picCar.ImageLocation = PicLocation;
        int CarStock;
        int.TryParse(Stock, out CarStock);

        if (CarStock <= 3)
        {
            lblStock.ForeColor = Color.Red;
            lblStock.Text = "Hurry there's only " + CarStock + " cars availiable!";
        }
        else
        {
            lblStock.ForeColor = Color.Green;
            lblStock.Text = "There are " + CarStock + " cars availiable!";
        }


        double carPrice;//the variable
        double.TryParse(Price, out carPrice);
        lblPrice.Text = "Cost of car - £" + carPrice;

        lblTotalPrice.Text = "£" + carPrice;

    }


    private void btnAccept_Click(object sender, EventArgs e)
    {
        for (int rows = 0; rows < database.dgvBMW.Rows.Count; rows++)
        {

            for (int col = 0; col < database.dgvBMW.Rows[rows].Cells.Count; col++)
            {
                string value = database.dgvBMW.Rows[rows].Cells["model"].Value.ToString();

            }
        }
    }

    public void chkAuto_CheckedChanged(object sender, EventArgs e)
    {


        if (chkAuto.Checked = true)
        {

            carPrice = carPrice + 1300;//the problem

    }


}

}

the error with the method at the bottom states. the name 'carPrice' does not exsist in the current context. thanks in advance

回答1:

DaveDev answer is correct move out the variable

public void chkAuto_CheckedChanged(object sender, EventArgs e)
{


    if (chkAuto.Checked = true)
    {

        carPrice = carPrice + 1300;//because is declared inside another method

}

Make carPrice an instance variable

public partial class BMW : Form
{
   private CarDatabase database;
   private double carPrice;
   ...

And remove it from the method

private void BMW_Load(object sender, EventArgs e)
{
    ...
    // double carPrice;
    ...


回答2:

You need to move carPrice out of its current scope to become a private field of the class.