0

我使用的 API dosnt 响应 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。如果我想补充我的问题怎么办?)

4

2 回答 2

0

我不会说英语。我正在与谷歌翻译打交道。

如果我理解您的问题,您需要编写以下程序: 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();
}

我希望回答你的问题。

于 2012-04-24T05:39:53.107 回答
0

对不起,没有测试代码。

确实会启动 NullReference,因为我没有创建类的新实例(立即分配 null 值),因此 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());
        }
    }
}
于 2012-04-24T16:32:54.437 回答