3

ボタン (btnsearch_Click) をクリックしてメイン フォームのイベントにアクセスしようとしていますが、クリックするたびに「オブジェクト参照がオブジェクトのインスタンスに設定されていません」と表示されます。

これが私のコードです:

ユーザーコントロール

namespace Purchase_Order
{
    public partial class Search : UserControl
    {
        public event EventHandler btnSearchClicked;

        public Search()
        {
            InitializeComponent();
        }
        private void btnsearch_Click(object sender, EventArgs e)
        {

           btnSearchClicked(sender, e);
        }
   }
}

メインフォーム

namespace Purchase_Order
{
    public partial class formMain : Form
    {

        public formMain()
        {
            InitializeComponent();            
        }




 private void formMain_Load(object sender, EventArgs e)
        {

Search searchbox = new Search();
searchbox.btnSearchClicked += new EventHandler(SearchClicked);
}


 void SearchClicked(object sender, EventArgs e)
        {
            MySqlConnection con = new MySqlConnection(serverstring);

            try
            {

                string query = "SELECT * FROM tblclassification WHERE INSTR(class_name, @search)";

                MySqlCommand cmd = new MySqlCommand(query, con);
                MySqlDataAdapter da = new MySqlDataAdapter(cmd);

                Search content = new Search();
                cmd.Parameters.AddWithValue("@search", content.btnsearch.Text);

                DataTable dt = new DataTable();
                da.Fill(dt);


                classification control = new classification();
                control.dataGridView1.DataSource = dt;
                control.dataGridView1.DataMember = dt.TableName;

                panelMain.Controls.Clear();
                panelMain.Controls.Add(control);
                MessageBox.Show("OK");

            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                if (con.State == ConnectionState.Open)
                {
                    con.Close();
                }
            }    
        }
4

4 に答える 4

4

メソッドでユーザー コントロールの新しいインスタンスを作成しており、SearchClickedそれに対してイベントを登録していません。

Search content = new Search();

また、次のようにイベントを発生させる前に、コントロールがイベントを登録しているかどうかを確認することをお勧めします。

private void btnsearch_Click(object sender, EventArgs e)
{
 if(btnSearchClicked != null)
       btnSearchClicked(sender, e);
}
于 2013-04-30T07:17:08.187 に答える
0

formMain_Load の Search インスタンスを SearchClicked メソッドと共有する

メインフォーム

 public partial class formMain : Form
    {
        private Search _searchbox;
        ...

private void formMain_Load(object sender, EventArgs e)
{
    _searchbox = new Search();
    _searchbox.btnSearchClicked += new EventHandler(SearchClicked);
}

void SearchClicked(object sender, EventArgs e)
        {


     Search content = _searchbox;

MySqlConnection con = new MySqlConnection(serverstring);

            try
            {

                string query = "SELECT * FROM tblclassification WHERE INSTR(class_name, @search)";

                MySqlCommand cmd = new MySqlCommand(query, con);
                MySqlDataAdapter da = new MySqlDataAdapter(cmd);


                cmd.Parameters.AddWithValue("@search", content.btnsearch.Text);

                DataTable dt = new DataTable();
                da.Fill(dt);


                classification control = new classification();
                control.dataGridView1.DataSource = dt;
                control.dataGridView1.DataMember = dt.TableName;

                panelMain.Controls.Clear();
                panelMain.Controls.Add(control);
                MessageBox.Show("OK");

            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                if (con.State == ConnectionState.Open)
                {
                    con.Close();
                }
            }    
            }
        }

ユーザーコントロール

public partial class Search : UserControl
    {
        public event EventHandler btnSearchClicked;

        public Search()
        {
            InitializeComponent();
        }
        private void btnsearch_Click(object sender, EventArgs e)
        {

           btnSearchClicked(sender, e);
        }
   }
于 2013-04-30T09:06:27.650 に答える