如何将项目从checkedListBox移动到另一个checkedListBox

时间:2015-02-13 14:49:28

标签: c#

我制作了一个程序,用checkedListBox.Items中写的文字添加TextBox。关于这一点,为了使一切更美观,我制定了一条规则,如果CheckedListBox1中添加的项目数量大于我设置的数量,它将转到第二个CheckedListBox,依此类推。

我还可以将我的条目保存在.txt文件中,以便我可以轻松访问以前的参考文献。所以我自然也做了Load References,显然加载了我保存的文件。

无论如何,我的困境如下:当我按下Load References按钮时,它会将文本中的所有引用(行)加载到第一个checkedListBox中。我希望它尊重以前的法律。如果我点击Load References我希望如果有超过10个条目,那么所有其他条目将进入另一个checkedListBox,因此,如果从第二个传递限制数量checkedListBox其余的将进入第三个,依此类推。

我已经在StackOverflow和Web上搜索了几个解决方案,一些更相关的解决方案:

First found link semi-regarding the subject

Second found link

所以为了不弄错,我会声明我希望将超过限制的所有条目移动到另一个checkedlistBox,而不是像链接所暗示的那样复制。

这是我的Load Reference按钮的代码行:

private void button8_Click(object sender, EventArgs e)
{
   string fileData = File.ReadAllText(@" To-Do References .txt");
   checkedListBox1.Items.AddRange(fileData.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries)); 
}

此外,我尝试了几种方法,但这个方法似乎是最接近的,即使我几乎没有令人满意的结果:

var i = checkedListBox1.Items.Count;
if (i >= 10)
   checkedListBox2.Items.Insert(0, checkedListBox1.Items);

关于这行代码:它确实将一个条目发送到第二个checkedList Box,只是该条目被称为(Collection)并且与我的引用无关。

我希望自己明确表示感谢你的支持!

更新

标记的答案适用于此类程序。由于我没有找到类似的东西,我相信这很可能是实现将文本行分隔成不同的checkedListBox的最佳方式。

3 个答案:

答案 0 :(得分:3)

if you populate listboxes properly there will be no need to move items

private void button8_Click(object sender, EventArgs e)
{
   int limit = 10;
   string[] fileData = File.ReadAllText(@" To-Do References .txt").Split(new string[] { "\r\n" },    StringSplitOptions.RemoveEmptyEntries);
   // this loop adds items to the 1st list until limit is reached
   for(int i =0; i<limit && i<fileData.Length; i++)
      checkedListBox1.Items.Add(fileData[i]);
   // if there extra items, 2nd loop adds them to list №2
   for(int i =limit; i<fileData.Length; i++)
      checkedListBox2.Items.Add(fileData[i]);
}

答案 1 :(得分:0)

设置一个限制,可能是一个乘数来控制checkList,数据将被添加到。

int limit = 10;
int checkList = 1;
string[] fileData = File.ReadAllText(@" To-Do References .txt").Split(new string[] { "\r\n" },    StringSplitOptions.RemoveEmptyEntries);

for (int i = 0; i < fileData.Length; i++)
{
    if (i == limit * checkList)
    {
        checkList++;
    }

    switch (checkList)
    {
        case 1: checkedListBox1.Items.Add(fileData[i]); break;
        case 2: checkedListBox2.Items.Add(fileData[i]); break;
        case 3: checkedListBox3.Items.Add(fileData[i]); break;
    }
}

与文本文件一样大,将数据添加到checkedListBox只需要在switch语句中添加一个新行。

答案 2 :(得分:0)

好吧,我的头被困在wpf的土地上,所以我只想将它绑定到列表列表,项目控件或类似的东西。回过头来看,当然看起来你正在使用winforms,所以这可能不适用......但是我会发帖,因为它仍然可以使用WinForms DataRepeater控件以这种方式完成。

List<List<string>> mainList = new List<List<string>>();
int listIndex = 0;
string[] fileData = File.ReadAllText(@" To-Do References.txt").Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
for(int i = 0; i<=fileData.Length; i++)
{
    mainList[listIndex].Add(fileData[i]);
    if (i%10 == 0)
    {
        listIndex++;
    }
}

然后将mainList绑定到控件并配置ItemTemplate。

有很多关于绑定到DataRepeater的信息,但是这里有一个链接: https://msdn.microsoft.com/en-us/library/cc488279.aspx