0

ファイルの各行をチェックするボタンを作成しようとしていますopenFileDialog1.FileName。同じ行に「LCD」または「laser」と「on」のいずれかの文字列が含まれているか、または「laser」と「off」が含まれているか同じ行と文字列「.end」で、何かをします。

私は C# を初めて使用し (今週から始めました)、それも英語のネイティブ スピーカーではありません。

私の目標は、LCDを制御してレーザーをオンまたはオフにするだけで、Arduinoロボットアーム(最初のビルドなので非常にシンプル)をある程度プログラム可能にすることです(これまでのところ)。

ところで、これは単なるシミュレータであるため、シリアル データは送信されません。

以下は問題のあるコードのスニペットです。問題は、シミュレーターでコードを「実行」すると、コードでチェックするため、すべての行を一度にチェックしているように見えることです。

LCD = hello  
laser = on  
LCD = 000  
laser = off

LCDを000に設定するだけで、前にコードだけでレーザー=をチェックしましたが、そこでは機能しませんでしたが、試してみるとprivate void Form3_Load(object sender, EventArgs e)完全に機能したので、各コードの最後のLCDコマンドが機能し、レーザーコード動作しません。

また、すべての行が 1 秒を表すようにしたいので、各行が次の行に続くまでに 1 秒かかります。

間隔はtimer11000 (1 秒)

  private void timer1_Tick(object sender, EventArgs e)
    {

        int lineNumber = richTextBox1.GetLineFromCharIndex(richTextBox1.TextLength);


        string[] lines = File.ReadAllLines(openFileDialog1.FileName);

        try
        {

            for (int i = 0; i < lineNumber; i++)
            {
                if (lines[i].Contains("LCD"))
                {
                    label1.Text = lines[i].Remove(0, 6);
                }
                if (lines[i].Contains("laser") && lines[i].Contains("On"))
                {
                    pictureBox4.Show();
                }
                if (lines[i].Contains("laser") && lines[i].Contains("Off"))
                {
                    pictureBox4.Hide();
                }
                if (lines[i].Contains(".end"))
                {
                    button2.PerformClick();
                } 

            } 
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Form3", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
4

1 に答える 1

2

ここでの問題は、File.ReadAllLines()1 秒に 1 回呼び出されるコードの外側を実行するコードを配置する必要があることですtimer1_Tick()。本当にやりたいことがファイルの1行を処理するだけである場合、タイマーが刻むたびにファイル全体を読んでいます。

于 2014-11-06T22:37:39.713 に答える