我制作了一个程序,用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
所以为了不弄错,我会声明我希望将超过限制的所有条目移动到另一个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的最佳方式。
答案 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