Вы создаете новый экземпляр Form1, поэтому вы изменяете текст в форме, которая не отображается, а также форму, в которой кнопка была фактически нажата. Вы можете сделать что хотите, передав форму в качестве параметра вызову метода:
class Class1
{
string s = "hi";
public void cl(Form1 form1)
{
form1.textBox1.Text = s;
}
}
private void button1_Click(object sender, EventArgs e)
{
Class1 class1 = new Class1();
class1.cl(this);
}
Но может быть лучше, чтобы форма (зависит от реального случая) вносила изменения в внешний вид формы только в самом коде формы, используя вспомогательные классы только для генерации данных, например:
class Class1
{
string s = "hi";
public string cl()
{
return s;
}
}
private void button1_Click(object sender, EventArgs e)
{
Class1 class1 = new Class1();
this.textBox1.Text = class1.cl();
}