0

10 秒ごとにイベントを発生させるシステム タイマーがあります。そのため、10 秒ごとにフォームのメイン スレッドからクラス「Termocoppia」を呼び出して「milliV」の値を転送し、変数「tempEx」の値を取得することを期待しています。

public partial class Form1 : Form
{

        public Form1()
        {
        InitializeComponent();
        System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
        timer.Tick += OnTimerTick;
        timer.Interval = 10000;
        timer.Start();
}

double tempEx;

//here a call the method "Calcola" in the class "Termocoppia"
private void OnTimerTick(object sender, EventArgs e)
{
        double milliV = Convert.ToDouble(textBox8.Text); //I have a value of 1.111
        Termocoppia thm = new Termocoppia();
        thm.Calcola(milliV, tempEx);
        textBox7.Text = tempEx.ToString();
}

次に、値 milliV がクラス「Termocoppia」内のメソッド「Calcola」に転送されます。ブレークポイントを付けてデバッグしたところ、値がクラスに受信されることを確認しました。

クラス「テルモコッピア」は次のようなものです。

public  class Termocoppia
{
    public double Calcola(double milliV,  double tempEx)//here the value of milliV is still 1.111
    {  
        tempEx= milliV;//here the value of tempEx is 0???
        return tempEx;
    }
}

クラスに送信された値とまったく同じ値が返されることを期待していますが、0 が返され続けます。「tempEx=milliV」行で変数 tempEx をデバッグすると、tempEx の値が 0 になり、その理由がわかりません。 ? ここで初心者の間違いを犯していると確信していますが、この問題を解決することはできません。

4

2 に答える 2

2

「tempEx」と呼ばれる 2 つの変数、フィールドとパラメーターがあります。関数は (フィールドではなく) パラメータCalcolaを変更しtempEx、同じ値を返します。しかし、呼び出し元は戻り値で何もしていません。私の提案は、この値をフィールドに 2 つ入れることtempExです。

行を変更します。

thm.Calcola(milliV, tempEx);

の中へ:

tempEx = thm.Calcola(milliV, tempEx);

提案: この種の間違いを防ぐために、コーディング標準を使用してください。パラメータにはキャメルケース (つまり tempEx) を使用し、フィールドにはアンダースコア (_tempEx) を使用します。

于 2013-05-05T09:50:10.510 に答える
1

Termocoppia.Calcola からの戻り値を使用していません。

private void OnTimerTick(object sender, EventArgs e)
{
    double milliV = Convert.ToDouble(textBox8.Text); //I have a value of 1.111
    Termocoppia thm = new Termocoppia();
    // the return value from Cacola has to be assigned to tempEx
    tempEx = thm.Calcola(milliV, tempEx);
    textBox7.Text = tempEx.ToString();
}

メンバー変数とメソッド パラメーターとして tempEx に同じ変数名を使用しないでください。

于 2013-05-05T09:52:27.550 に答える