0

私が使用している 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);
        }
    }
}

(追伸。質問に追加したい場合はどうすればよいですか?)

4

2 に答える 2

0

申し訳ありませんが、コードをテストしていません。

クラスの新しいインスタンスを作成しなかったため(すぐにnull値が割り当てられたため)、実際にNullReferenceを起動し、Addメソッドが失敗します。

ListBox.ObjectCollectionを使用することは、この問題を解決する正しい方法ではありません。お詫び申し上げます。この場合、ジェネリックコレクションリストを使用することをお勧めします。コードを書き直します。

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 に答える
0

私は英語を話せません。私はGoogle翻訳を扱っています。

私があなたの質問を理解した場合、次のようにプログラムする必要があります。 1. テキスト ファイルからデータを復元して、CheckedListBox にデータを入力します。

次のことをお勧めします。 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 に答える