phil.o is right: your code reuses the same variable each time.
for (int i = 0; i <= N; i++)
{
checkedListBox3.Text = BarcodeTxt.Text + "-" + rnd;
checkedListBox3.Text.ToString().Split(',').ToList().ForEach(c => checkedListBox3.Items.Add(c.Trim()));
}
So the first thing to do is to move the random number generation code into the loop:
for (int i = 0; i <= N; i++)
{
int r = generator.Next(100);
string rnd = r.ToString("D3");
checkedListBox3.Text = BarcodeTxt.Text + "-" + rnd;
checkedListBox3.Text.ToString().Split(',').ToList().ForEach(c => checkedListBox3.Items.Add(c.Trim()));
}
But ... that's some odd code!
You set the listbox text to a different value each time round the loop. That's OK - but it looks odd - it will leave the final value in the listbox.
You then get the value you just set, convert it to a string (which it is already), split it to an array on a character which is part of a string that doesn't change inside the loop, convert that array to a List - which you don't need to do, because Array has its own Foreach:
string[] data = { "hello", "there" };
data.ToList().ForEach(s => Console.WriteLine(s));
Array.ForEach(data, s => Console.WriteLine(s));
The final two lines are equivelant but the latter doesn't mean creating new and unnecessary data structures.
And then you add them all to your list box.
So, depending on the content of Barcode.Text and how many commas it contains, you will add the same data several times, plus the "new" random number value.
Unless the Barcode is a specific type that allows non-numeric characters, that code will just add the barcode and the new random number each time. And most barcodes can't contain anything other than numeric data!
I'd suggest that you sit down and think carefully about exactly what you are trying to do here - that code looks a lot more complicated than I suspect it really needs to be.