It depends on what type of List you have created whether it compiles or not, but if I assume it does then you can't do it like that.
The problem is that you are creating a new instance of a Form2 in your click handler:
Form2 frm2 = new Form2();
And setting the value of that - this is not the same as the form your are displaying in the same way that if you put your mobile in your car glove box, then buy a new car, you would not expect to find you mobile in it's glove box!
Assuming that the button is a part of Form2, then you do not need to specify any form when accessing the list:
private void button1_Click(object sender, EventArgs e)
{
int k=0;
string s = Clipboard.GetText();
string[] lines = s.Split('\n');
foreach (string line in lines)
{
if (k < list.Count)
{
list[k++].Text = line;
}
else
break;
}
}
If it isn't, then you want to keep a reference to the instance of Form2 you have already created and shown and use that - but preferably, but passing the new text to a Property or method within the form instance and letting it do the work.