1

私はプログラミングの初心者です。私の質問は、日時ピッカーの使用に関するものです。プログラムで folderbrowserdialog を使用して、フォルダーから多数のファイルにアクセスし、それらを操作して、平均値、最小値、最大値などのさまざまな出力を導き出しました。次に、ファイルに対してタスクを実行するために、データタイム ピッカーと folderbrowserdialog ボタンを含めました。特定の期間。ただし、コードを実行すると、フォルダーの場所を指定するように要求されます。次に、プログラムは、出力が必要な時間間隔を要求することなく、必要な出力を生成します。csvファイルを含むフォルダーを選択した後、時間間隔を選択するようにプログラムに要求するにはどうすればよいですか。コードは以下のとおりです。

namespace Filereader_m_15062012
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            DialogResult result = folderBrowserDialog1.ShowDialog(); // Show the dialog.
            // create a list to insert the data into
            //put all the files in the root directory into array
            string[] fileEntries = Directory.GetFiles(folderBrowserDialog1.SelectedPath, "*.csv");

            // Display all files.
            TextWriter tw1 = new StreamWriter("C:/Users/a3708906/Documents/Filereader m 26062012 -2/Filereader m 22062012/listoffiles.txt");

            List<string> filenames = new List<string>();
            tw1.WriteLine("--- Files: ---");
            foreach (string path in fileEntries)
            {
                tw1.WriteLine(path);
            }

            tw1.Close();

            //int count = 0;
            //float sum = 0;

            string fileID1 =""; 
            List<string> fileID   = new List<string>();
            List<string> means = new List<string>();
            List<string> maximums = new List<string>();
            List<string> minimums = new List<string>();


            TextWriter tw2 = new StreamWriter("C:/Users/a3708906/Documents/Filereader m 26062012 -2/Filereader m 22062012/errorlist.txt");
            foreach (string path in fileEntries)
            {
                if (File.Exists(path))
                {  
                    string text = "";
                    // create a list to insert the data into
                    List<float> noise = new List<float>();
                    List<DateTime> time = new List<DateTime>();

                    TextWriter tw3 = new StreamWriter("C:/Users/a3708906/Documents/Filereader m 26062012 -2/Filereader m 22062012/rawdata.txt");

                    string file = path;

                    FileInfo src = new FileInfo(file);
                    TextReader reader = src.OpenText();
                    text = reader.ReadLine();

                    // while the text being read in from reader.Readline() is not null
                    while (text != null)
                    {
                        text = reader.ReadLine();

                        {
                            while (text != null)
                            {
                                text = reader.ReadLine();
                                if (text != null)
                                {
                                    string[] words = text.Split(',');
                                    noise.Add(Convert.ToSingle(words[3]));
                                    time.Add(Convert.ToDateTime(words[2]));
                                    fileID1 = words[1];

                                    // write text to a file
                                    tw3.WriteLine(text);
                                    //foreach (string word in words)
                                    //{
                                    //    tw.WriteLine(word);
                                    //}
                                }

                            }
                        }

                        tw3.Close();

                        TextWriter tw4 = new StreamWriter("C:/Users/a3708906/Documents/Filereader m 26062012 -2/Filereader m 22062012/noise.txt");

                        //float minValue = noise.Min();
                        float maxValue = Enumerable.Max(noise);
                        float mean = Enumerable.Average(noise); 
                        float minValue = Enumerable.Min(noise);
                        //float maxValue = noise.Max();
                        //float mean = noise.Average(); 

                        //foreach (float ns in noise)
                        {
                            //tw4.WriteLine(Convert.ToString(ns));
                            //count++;
                            //sum += ns;
                            //mean = sum / count; 

                            //float min1 = 0; 
                            //if (ns > max) 
                                //max = ns; 
                            //else if (ns < max) 
                                //min1 = ns; 
                            //if (min1 < min && min1 > 0) 
                            //min = min1; 
                        }

                        tw4.Close();

                        fileID.Add(Convert.ToString(fileID1)); 
                        means.Add(Convert.ToString(mean));
                        maximums.Add(Convert.ToString(maxValue));
                        minimums.Add(Convert.ToString(minValue));
                    }                            
                }

                else
                {
                    tw2.WriteLine("{0}", path);
                }

                tw2.Close();
            }

            TextWriter tw5 = new StreamWriter("C:/Users/a3708906/Documents/Filereader m 26062012 -2/Filereader m 22062012/IDs.txt");
            tw5.WriteLine("FILE IDS");
            tw5.WriteLine("==========");
            foreach (string m in fileID)
            {
                tw5.WriteLine("MOTE {0}", (m));
            }

            tw5.Close();


            TextWriter tw6 = new StreamWriter("C:/Users/a3708906/Documents/Filereader m 26062012 -2/Filereader m 22062012/results.txt");
            tw6.WriteLine("File IDs" + "          " + "Means" + "          " + "Maximums" + "        " +  "Minimums");
            tw6.WriteLine("========" + "          " + "=====" + "          " + "========" + "        " +  "========");
            for (int i=0; i < fileID.Count; i++)
                   {
                       int j = i;
                       tw6.WriteLine("Mote" + " " + Convert.ToString(fileID[i]) + "          " + Convert.ToString(means[j]) + "          " + Convert.ToString(maximums[j]) + "              " + Convert.ToString(minimums[j]));         
                    }

            tw6.Close();

        }       


        private void folderBrowserDialog1_HelpRequest(object sender, EventArgs e)
        {

        }


        private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
        {

        }

    }

これについて誰かの助けに感謝します。ありがとう。

4

2 に答える 2

2

2 つの日時ピッカーを使用して別のフォームを作成してみてください

form2 は次のようになります。

スタートと言うラベル

日時ピッカー開始

終わりを告げるラベル

日時ピッカーの終わり

ボタンOK

そのためのコードは次のようになります。

 private void btok_Click(object sender, EventArgs e)
    {
        if (dtpickerend.Value == dtpickerstart.Value)
            MessageBox.Show("Please select an interval", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
        else
        {
            Program.date_start = dtpickerstart.Value;
            Program.date_end = dtpickerend.Value;
            this.DialogResult = DialogResult.OK
            this.Close();
        }
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        this.DialogResult = DialogResult.Cancel;
    }

また、program.cs に移動して、これら 2 つの変数を追加します。

/// <summary>
    /// The main entry point for the application.
    /// </summary>
    public static DateTime date_start;
    public static DateTime date_end;
    [STAThread]
    static void Main()

最後に、そのフォームを呼び出したいときにメインフォームにこれらを追加します。

secondform datepicker_dialog = new secondform();
        DialogResult dr;
        dr = datepicker_dialog.ShowDialog();
        if (dr == DialogResult.OK)
            //means that the user succseful selected an interval
            ;
        else
            //means the user closed the second form
            ;
于 2012-06-27T16:40:53.393 に答える
1

Loadフォームが読み込まれるとすぐに呼び出されるイベント ハンドラーですべてを実行しているため、2 つの DateTimePicker を設定する時間がありません。

フォームにボタンを追加し、すべてをそのClickイベント ハンドラーに移動します。もちろん、プロパティを介してアクセスできる両方の DateTimePicker に設定された値を考慮に入れるように、コードを変更する必要がありますValue

2 つの日付が必要な理由は明確ではありませんが、ファイルの作成日/最終変更日/最終アクセス日に基づいてファイルのみを考慮したい場合は、名前空間をインポートして、およびクラスSystem.IOから関連するメソッドとプロパティを使用できます。DirectoryFileFileInfo

于 2012-06-27T16:57:28.073 に答える