0

私はこれをどのように行うことができるかについて数時間検索しましたが、私が見つけた解決策はどれもうまくいきませんでした...

複数のComboBoxを含むフォームがあり、選択した値を取得して、別のクラスのメソッドで使用したいと思います。値は、データベースを照会するためのフィルターの変数として使用されます。ただし、値を割り当てると、「非静的フィールド、メソッド、またはプロパティにはオブジェクト参照が必要です」というエラーが発生しました。他のクラスでフォームの新しいインスタンスを作成しようとしましたが、新しいインスタンスには、そもそも必要なComboBox値がありませんか?

これを行う方法がよくわかりません。私はたくさんの方法を試しましたが、すべて失敗しました。= /プログラミングは初めてなので、助けていただければ幸いです。

 public static void LoadMainTable(ref DataTable mainGridTable)
    {

        //Loads entires into a data table
        //FormMonitor FormMonitor = new FormMonitor();
        string bankBox = FormMonitor.ComboBox1.SelectedItem;
        string theDate = FormMonitor.DateTimePicker.Value.ToString("yyyy-MM-dd");



        //Grabbed in the order they will be displayed
        cmd.CommandText = String.Format("W.I.P.");
        //Add variables for filters after figuring out how to do it
        reader = cmd.ExecuteReader();


        //reads data into dmainGridTable
        while (reader.Read())
        {

            mainGridTable.Rows.Add(reader["column1"], reader["column2"], reader["column3"], reader["column4"].ToString(),
                                    reader["column5"].ToString(), reader["column6"]);
            //FormMonitor.file_ProgressUpdated(); //non-static error again, fix
            connect.Close();
        }
    }
4

2 に答える 2

0

コンボボックスの選択した値をメソッドに渡す必要があります。これが機能しない場合は、コードをさらに投稿してください。何が起こっているのかを正しく理解できます。

 public static void LoadMainTable(ref DataTable mainGridTable, string comboSelectedValue)
        {

            //Loads entires into a data table
            //FormMonitor FormMonitor = new FormMonitor();
            string bankBox = FormMonitor.ComboBox1.SelectedItem;
            string theDate = FormMonitor.DateTimePicker.Value.ToString("yyyy-MM-dd");



            //Grabbed in the order they will be displayed
            cmd.CommandText = String.Format("W.I.P.");
            //Add variables for filters after figuring out how to do it
            reader = cmd.ExecuteReader();


            //reads data into dmainGridTable
            while (reader.Read())
            {

                mainGridTable.Rows.Add(reader["column1"], reader["column2"], reader["column3"], reader["column4"].ToString(),
                                        reader["column5"].ToString(), reader["column6"]);
                //FormMonitor.file_ProgressUpdated(); //non-static error again, fix
                connect.Close();
            }

}

于 2013-01-11T18:51:05.617 に答える
0

フォームのインスタンスのREFERENCEを使用する場合は、任意のコントロールの値を使用できます。クラス名を使用しています。

例:現在、私のwinformプロジェクトはメインフォームとしてMDIを使用しています。フォーム上の1つのMonthCalendarコントロールの選択された値が必要になる場合があります。私が行ったのは、このフォームの一種のアクセサーです。これらの値を取得する場合は、MdiParentを使用してメインフォーム(MdiContainer)を検索し、MonthCalendarを含むフォームへの参照を見つけました。そして、私は自分のアクセサーを呼び出します。(アクセサーを使用してから、制御値を直接取得する方がクリーンです)

もちろん、プログラムの実行方法が異なる場合は、別のロジックを見つける必要があるかもしれません。しかし、それはベースです。

于 2013-01-11T19:13:11.410 に答える