c# - NullReferenceException 未处理 - 什么是 null?

标签 c# winforms

我试图通过单击一个按钮 (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();
                }
            }    
        }

最佳答案

您正在 SearchClicked 方法中创建用户控件的新实例,并且您没有针对它注册事件。

Search content = new Search();

如果您在引发事件之前检查是否有任何控件已注册您的事件也更好:

private void btnsearch_Click(object sender, EventArgs e)
{
 if(btnSearchClicked != null)
       btnSearchClicked(sender, e);
}

关于c# - NullReferenceException 未处理 - 什么是 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16294212/

相关文章:

c# - 验证绑定(bind)到同一对象的不同属性的控件会重置对象值

c# - 在 C# 上转义花括号和反斜杠

c# - 从 MemoryStream 获取子字符串而不将整个流转换为字符串

c# - 使用 1 个表单和大量函数在 C# 中组织代码

c# - Windows 消息泵中的清理消息

c# - 如何从 TabControl 中删除 TabPage?

c# - EF Core 更新现有实体

c# - Entity Framework - 在 Linq 中处理空值

c# - 什么是根目录或如何在 DotNetZip 中设置目录

c# - 如何为列表框中的每个项目设置不同的工具提示文本?