填充上一个对话框中的CheckedBoxList1

时间:2012-04-24 04:02:20

标签: c# winforms dialog checkedlistbox

我正在使用dos的API响应Form_Load事件。所以我想用CheckedListBox1填充我用来调用包含CheckedlistBox1的对话框的按钮。这是我的第一次尝试。

    private void button3_Click(object sender, EventArgs e)
    {
        TextSelectorForm textSelectionForm = new TextSelectorForm();

        CheckedListBox checkedListBox1;

        string line;
        StreamReader file = new StreamReader("test.txt");
        while ((line = file.ReadLine()) != null)
        {
            TextSelectorForm.checkedListBox1.Items.Add(line);
        }
        file.Close();

        textSelectionForm.Show();
    }

思想,想法,例子?谢谢!


我收到错误“对象引用未设置为对象的实例”。我正在慢慢地学习。这是我的代码。

    public partial class Form1 : System.Windows.Forms.Form
{
    public Form1(ExternalCommandData commandData)
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        CheckedListBox.ObjectCollection data = null;

        string line;
        StreamReader file = new StreamReader(@"C:\test.txt");

        while ((line = file.ReadLine()) != null)
        {
            data.Add(line);
        }

        file.Close();

        Form2 form2 = new Form2(data);
        form2.Show();
    }
}

    public partial class Form2 : System.Windows.Forms.Form
{
    public Form2(CheckedListBox.ObjectCollection formdata)
    {
        InitializeComponent();

        if (formdata != null)
        {
            this.checkedListBox1.Items.AddRange(formdata);
        }
    }
}

(PS。如果我想添加到我的问题怎么办?)

2 个答案:

答案 0 :(得分:0)

我不会说英语。我正在处理Google翻译。

如果我理解您的问题,您需要编制以下内容: 1.从文本文件中恢复数据以填充CheckedListBox 2.将恢复的数据发送到将显示的表单。

我建议如下: 1.创建一个ListBox.ObjectCollection类型的对象,用于存储所需的信息。 2.以ListBox.ObjectCollection接受形式创建构造函数作为参数。 3.在表单的构造函数中,将参数分配给ListBox。

//CONSTRUCTOR IN TEXTSELECTORFORM
public TextSelectorForm(ListBox.ObjectCollection dataFromOtherForm) {
    InitializeComponents();
    //Add this code after InitializeComponents();
    if (dataFromOtherForm != null) {
        this.listBoxInThisForm.AddRange(dataFromOtherForm);
    }
}


//CODE FOR BUTTON IN OTHER FORM
private void button3_Click(object sender, EventArgs e) {
    //Stores the values ​​to display in the ListBox
    ListBox.ObjectCollection data = null;

    //Your code from retrieve data
    string line;
    StreamReader file = new StreamReader("test.txt");
    while ((line = file.ReadLine()) != null) {
        data.Add(line);
    }
    file.Close();

    //Form to send the data
    TextSelectorForm textSelectionForm = new TextSelectorForm(data);
    textSelectionForm.Show();
}

我希望回答你的问题。

答案 1 :(得分:0)

抱歉,没有测试过代码。

确实启动了NullReference,因为我没有创建类的新实例(立即指定空值),因此Add方法失败。

使用ListBox.ObjectCollection不是解决此问题的正确方法,我向我道歉。对于这种情况,最好使用泛型集合List。重写代码:

public partial class Form1 : System.Windows.Forms.Form {
    public Form1(ExternalCommandData commandData) {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e) {
        List<string> data = new List<string>();

        string line;
        StreamReader file = new StreamReader(@"C:\test.txt");

        while ((line = file.ReadLine()) != null) {
            data.Add(line);
        }

        file.Close();

        Form2 form2 = new Form2(data);
        form2.Show();
    }
}

public partial class Form2 : System.Windows.Forms.Form {
    public Form2(List<string> formdata) {
        InitializeComponent();

        if (formdata != null) {
            this.checkedListBox1.Items.AddRange(formdata.ToArray());
        }
    }
}