2012-04-24 3 views
0

API, который я использую dosnt, отвечает на события Form_Load. Поэтому я хотел бы заполнить CheckedListBox1 кодом, включенным в кнопку, которую я использую, чтобы вызвать диалог, содержащий CheckedlistBox1. Это была моя первая попытка.Заполнение CheckedBoxList1 из предыдущего диалога

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. Что делать, если я хочу добавить к моему вопросу?)

ответ

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(); 
} 

Надеюсь ответить на ваш вопрос.

+0

Я получаю сообщение об ошибке «Ссылка на объект не установлена ​​в экземпляр объекта». Я учусь, медленно. Вот мой код. – topofsteel

+0

спасибо! – topofsteel

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()); 
     } 
    } 
}