【问题标题】:Error: System.NullReferenceException错误:System.NullReferenceException
【发布时间】:2013-07-30 11:23:48
【问题描述】:

我有这段代码,但是当我点击列表框中的一条记录时,我遇到了这个错误:

System.NullReferenceException

这是我的代码:

namespace CestovniPrikaz
{
    public partial class Form2 : Form
    {
        SqlConnection cn = new SqlConnection(@"Data Source=(Loca..Security=True");
        SqlCommand cmd = new SqlCommand();
        SqlDataReader dr;

        public Form2()
        {    InitializeComponent();
            loadlist();  }
        private void Form2_Load(object sender, EventArgs e)
        {   cmd.Connection = cn;
            loadlist();  }

        private void loadlist()
        { listBox1.Items.Clear();
            cmd.Connection = cn;
            cn.Open();
            cmd.CommandText = "select Name from Person";
            dr = cmd.ExecuteReader();
            if (dr.HasRows)
            {
                while(dr.Read())
                {
                    listBox1.Items.Add(dr[0].ToString());                  
                } }
            cn.Close(); }      

        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {ListBox l = sender as ListBox;
            if (l.SelectedIndex != -1)
            {
                listBox1.SelectedValue = l.SelectedIndex;
                txtName.Text = listBox1.SelectedValue.ToString();
            }} } }

问题大概出在这一行:

txtName.Text = listBox1.SelectedValue.ToString();

请问你有什么想法吗?

【问题讨论】:

  • 我在这里复制,因为我有错误:帖子主要是代码......在我的代码中我有正常的;)
  • 表单加载时列表框中是否有项目?
  • 首先请确定您的错误在哪里,使用调试器来执行此操作。
  • 是的,我在列表框中有所有记录...加载列表正常...
  • 哪一行报错了?

标签: c# winforms listbox


【解决方案1】:

试试这个:

txtName.Text = l.SelectedItem.ToString();

【讨论】:

    【解决方案2】:

    这似乎是问题所在。

    listBox1.SelectedValue = l.SelectedIndex;
    txtName.Text = listBox1.SelectedValue.ToString();
    

    SelectedValue 为 null,而您正在调用 ToString,这会引发异常。为什么不干呢

    txtName.Text = l.SelectedIndex.ToString();
    

    此外,您正在直接调用listBox1 以及使用l (listBox1.SelectedValue = l.SelectedIndex;)。它们都引用同一个 ListBox。

    【讨论】:

    • 你说txtName.Text = listBox1.SelectedValue.ToString(); 正在抛出异常。我假设你有一个名为txtName 的文本框(否则它不会编译),所以问题在于lSelectedValue。考虑到listBox1.SelectedValue = l.SelectedIndex; 没有抛出异常,所以l 不可能是null。因此,只有 SelectedValue 为 null 并且您在其上调用 ToString。如果你使用txtName.Text = l.SelectedIndex.ToString();,那还会抛出异常吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多