-3

配列 Energy[] を public に設定する際に問題があります。Timer_Tick イベントで配列を使用する必要があります。配列を int に設定し、公開しようとしましたが成功しませんでした。

コードは次のとおりです。

using System;
using System.Windows.Forms;
using System.Collections.Generic;
using System.Linq;
using System.Data;
using System.Data.SQLite;

namespace Project
{
    public partial class FrmGame : Form
    {
        private string team;
        private string p;
        private List<DataGridViewRow> selected;
        public FrmPartida(string team, List<DataGridViewRow> selected)
        {
            this.selected = selected;
            InitializeComponent();
            this.team = team;

            this.ProgressBar.Value = 0;
            this.timer1.Interval = 100;
            this.timer1.Enabled = true;


            try
            {
                SQLiteConnection ocon = new SQLiteConnection(Config.stringConnect);
                dataSet1.Clear();
                SQLiteDataAdapter a = new SQLiteDataAdapter("Select * From players WHERE Teamplayers = '" + team + "'", ocon);
                a.Fill(dataSet1, "players");
            }
            catch (SQLiteException)
            {
                MessageBox.Show("There was an error");
            }

            Statistics(dataSet1, time);
        }

        public void Statistics(DataSet dataset, string team)
        {
            SQLiteConnection ocon = new SQLiteConnection(Config.stringConnect);
            DataTable table1 = dataset.Tables[0];

            string[] PlayerName = new string[6];
            int[] Strength = new int[6];
            int[] Energy = new int[6];
            try
            {
                if (tabela1.Rows.Count != 0)
                {
                    players = selected.Select(r => r.Cells[1].Value.ToString()).Take(6).ToArray();
                }
                if (table1.Rows.Count != 0)
                {
                    Strength = selected.Select(r => int.Parse(r.Cells[3].Value.ToString())).Take(6).ToArray();
                }
                if (table1.Rows.Count != 0)
                {
                    Energy = selected.Select(r => int.Parse(r.Cells[3].Value.ToString())).Take(6).ToArray();
                }

                int time = int.Parse(timer1.Interval.ToString());
                int count = int.Parse(ProgressBar.Value.ToString());
                int Strength1 = Strength[0], Strength2 = Strength[1], Strength3 = Strength[2], Strength4 = Strength[3], Strength5 = Strength[4], Strength6 = Strength[5];
                int Energy1 = Energy[0], Energy2 = Energy[1], Energy3 = Energy[2], Energy4 = Energy[3], Energy5 = Energy[4], Energy6 = Energy[5];
                int PlayerStatistics1, PlayerStatistics2, PlayerStatistics3, PlayerStatistics4, PlayerStatistics5, PlayerStatistics6;

                if ((count / 4) == time)
                {
                    for (Energy1 = 100; Energy1 > 1; Energy1--)
                    {
                        PlayerStatistics1 = Strength1 * Energy1 * time;
                    }
                }
                PlayerStatistics1 = Strength1 * Energy1 * time;
                PlayerStatistics2 = Strength1 * Energy1 * time;
                PlayerStatistics3 = Strength1 * Energy1 * time;
                PlayerStatistics4 = Strength1 * Energy1 * time;
                PlayerStatistics5 = Strength1 * Energy1 * time;
                PlayerStatistics6 = Strength1 * Energy1 * time;

                if (this.ProgressBar.Value == 180)
                {
                    MessageBox.Show(""+Energy1+"");
                }
            }
            catch (SQLiteException)
            {
                MessageBox.Show("There was an error");
            }
        }

        public void timer1_Tick(object sender, EventArgs e) 
        {
            if (this.BarraTempo.Value < 180)
            {
                this.BarraTempo.Value++; 
                if (BarraTempo.Value == 180)
                {
                    MessageBox.Show(""+Energy1+"" ); //"Energy1" needs to appear on this messagebox. 
                    FrmBreak f1 = new FrmBreak(this.time, selected);
                    f1.ShowDialog();
                    this.Hide();
                }
            }
            else
            {
                ProgressBar.Enabled = false;
            }
        }    
    }
}

誰かがこれを解決する方法を知っているなら、私に知らせてください。

ありがとうございました、

ジャンルッカ。

4

2 に答える 2

1

Energyローカル変数のようです。メソッドの実行のみがローカル変数にアクセスできるため、ローカル変数にはアクセス修飾子がありません。たとえばteamandのように、代わりにフィールドにすることを検討してください。selected

いくつかの補足事項: 命名規則に従って、変数は小文字で始まります (例: ) energy。また、一度フィールドにprivateすれば、それにアクセスするためにクラス内の別のメソッドが必要な場合を除いて、それをフィールドにする必要はありません。

于 2012-11-18T23:37:42.993 に答える
0

配列は関数内で宣言されているため、Energyその関数内からのみアクセスできます。つまり、外には存在しませんpublic void Statistics

配列を公開するには、次のようにクラスの先頭で宣言する必要があります。

using System;
using System.Windows.Forms;
using System.Collections.Generic;
using System.Linq;
using System.Data;
using System.Data.SQLite;

namespace Project
{
    public partial class FrmGame : Form
    {
        private string team;
        private string p;
        private List<DataGridViewRow> selected;

        //Declare the array here with the public access modifier***
        public int[] Energy = new int[6];

        public FrmPartida(string team, List<DataGridViewRow> selected)
        {
            //Code removed for clarity
        }

        public void Statistics(DataSet dataset, string team)
        {
            //Code removed for clarity
        }

        public void timer1_Tick(object sender, EventArgs e) 
        {
            //Code removed
        } 
    }
}

そうは言っても、それを public フィールドとして宣言する代わりに、アクセサー(「get」メソッド) の使用を検討する必要があります。

于 2013-01-23T11:00:04.860 に答える