1

これはばかげた質問のように思えるかもしれません。Windowsフォームで実行時にチェックリストボックスに項目を追加するために使用できるテキストボックスがあります。私はc#を使用しています。実行時に完全に正常に動作します。フォームが開いているときに、項目が追加されます。しかし、フォームを閉じて再度開くと、checkedlistbox リストに追加された項目が表示されません。私はデータソースを使用しておらず、使用したくないことに注意してください。私は何かをハードコードしたくはなく、フォームのテキストボックス入力を変数として使用して、コレクションリストにフィードすることを好みます。チェックリストボックスのオプションを拡張する方法がわかりませんでした。任意の支援をいただければ幸いです。

4

3 に答える 3

2

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

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

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

于 2009-07-06T13:51:01.803 に答える
2

Form にref List<string> valuesas パラメータを指定します。次に、これを 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;
        }
}
于 2009-07-06T13:55:43.153 に答える
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();
}
于 2009-07-06T21:12:41.483 に答える