2009-07-06 15 views
1

で展開すると、これはちょっと疑問に思えるかもしれません。私は、実行時にWindowsフォーム上のチェックリストボックスに項目を追加するために使用できるテキストボックスを持っています。私はC#を使用しています。実行時に完全に正常に動作します。フォームが開いているときに、アイテムが追加され、処理されます。しかし、フォームを閉じて再度開くと、チェックリストボックスのリストに追加された項目が表示されません。注意してください、私はデータソースを使用しないし、したくないです。私は何もハードコードしたくないし、フォームのテキスト入力を変数として使用してコレクションリストに入力する方が好きです。私はチェックリストボックスオプションを拡張する方法を理解できませんでした。いかなる援助も感謝します。項目を追加して、WindowsフォームのcheckedlistboxのコレクションリストをC#

+0

そして、あなたが追加された項目を保存している:ここでは

は、コードのですか? –

答えて

2

どのようにフォームを開いていますか?それはのようなものです:

FormName form = new FormName(); 
form.Show() 

私はそれが起こっていると考えることができる唯一の理由は、あなたがそれを表示するたびに新しいフォームのインスタンスをインスタンス化するのではなく、同じフォームを再利用しているということです。

+0

イベントハンドラform_loadとform_closedを使用します。 実行時に毎回ボックスを再チェックする必要がないように、フォームを実行するときにcheckedindicesプロパティを通じてcheckedlistboxリストのチェック項目を再投入するプログラムがあります。 –

+0

はい、どうやってフォームを開いていますか? Form_Loadはフォームを開いたときに発生し、Form_Closedはフォームを閉じるときに発生します。私たちに良い例を与えるためにいくつかのコードを投稿してください。 – GenericTypeTea

2

フォームにref List<string> valuesをパラメータとして指定してください。次に、CheckedListBoxのBindingSourceとしてこれを行います。

class MyForm : Form { 
     List<string> values; 
     BindingSource source; 

     public MyForm() 
     { 
      InitializeComponent(); 
     } 

     public MyForm(ref List<string> values):this() 
     { 
      if (values == null) 
       values = new List<string>(); 

      this.values = values; 

      checkedListBox1.DisplayMember = "Value"; 
      checkedListBox1.ValueMember = "Value"; 
      source = new BindingSource(this.values, null); 
      checkedListBox1.DataSource = source; 
     } 

     private void AddItemButton_Click(object sender, EventArgs e) 
     { 
      this.source.Add(textBox1.Text); 
      textBox1.Text = string.Empty; 
     } 
} 
+0

私はオプションを探しています。興味深いですね !!!!! –

0
private void frmMain_Load(object sender, EventArgs e) 
{ 
    if (!string.IsNullOrEmpty(Properties.Settings.Default.CheckedItems)) 
    { 
    string[] checkedIndicies = Properties.Settings.Default.CheckedItems.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); 
    for (int i1 = 0; i1 < checkedIndicies.Length; i1++) 
    { 
     int idx; 
     if ((int.TryParse(checkedIndicies[i1], out idx)) && (checkedListBox1.Items.Count >= (idx+1))) 
     { 
     checkedListBox1.SetItemChecked(idx, true); 
     } 
    } 
    } 
} 

private void button2_Click(object sender, EventArgs e) 
    { 
     if (textBox1.Text != "") 
     { 
      textBox1.MaxLength = 15; 
      // Change all text entered to be lowercase. 
      textBox1.CharacterCasing = CharacterCasing.Lower; 

      if (checkedListBox1.Items.Contains(textBox1.Text) == false) 
      { 
       checkedListBox1.Items.Add(textBox1.Text, CheckState.Checked); 

       textBox1.Text = ""; 
       MessageBox.Show("Added! Click Move to see List Box"); 
      } 

      else 
      { 
       MessageBox.Show("Already There!"); 
       textBox1.Text = ""; 
      } 
     } 
    } 



private void frmMain_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    string idx = string.Empty; 
    for (int i1 = 0; i1 < checkedListBox1.CheckedIndices.Count; i1++) 
    idx += (string.IsNullOrEmpty(idx) ? string.Empty : ",") + Convert.ToString(checkedListBox1.CheckedIndices[i1]); 
    Properties.Settings.Default.CheckedItems = idx; 
    Properties.Settings.Default.Save(); 
} 
+0

これをきれいにしたいかもしれませんが、それは全く読めません。投稿を編集し、コードをコードとして正しくマークします。また、表示されている場所のコードを表示してください。 .Show()または.ShowDialog()]フォーム。 – GenericTypeTea

関連する問題