Q:

Moving a part of the code from main class to deal with readability issues

I have a "Form1.cs" class where all of the proccessing happens and that file has nearly 2k line of code. I no longer can read it properly.
is there a way to move part of the functions to another file? an extension class? I still want to be able to call these functions from main "Form1.cs". And these functions should not have any problems reading public declared variables in main class.
using ...

namespace myprogram
{
    public partial class Form1 : Form
    {
       public void function1() {}
       public void function2() {}
       public void function3() {}
       public void function4() {}
    }
}

in the example above - what is the proper way to move function 4 to another file. Is there any other way to deal with the problem maybe?

A:

Making all of your controls publicly visible from outside the Form, and then just copying code into a separate class and having it access the instance of your Form to manipulate the controls directly will not help you maintain your code. It'll just make things a whole new kind of difficult.
What you really want is to move your "business logic", or whatever you want to call it, into a separate class, without moving code that directly touches the UI. (Leave that code in the original Form.)
You said you've already got helper classes, and it sounds like you intend to go the partial class route for now, so the following may be unnecessary to reiterate (but here goes anyway...)

Assuming your Form currently looks like this:
public partial class Form1 : Form
{
   public void function4()
   {
       var currentText = MyTextBox.Text;

       // Do a bunch of stuff that depends on the Text value and even manipulates it

       MyTextBox.Text = ??? // Some other value
   }

   public void SomeOtherFunction()
   {
       function4();
   }
}

I'd split out the functionality into a separate class, which accepts parameters from your Form and can pass values back, but absolutely does not directly reference controls on the Form that's calling it.
public partial class Form1 : Form
{
   private HelperClass helper;

   public Form1()
   {
       helper = new HelperClass();
   }

   public void SomeOtherFunction()
   {
       MyTextBox.Text = helper.Function4(MyTextBox.Text);
   }
}

public class HelperClass()
{
    public string Function4(string input)  // I need a better name
    {
       // Do a bunch of stuff that depends on the input value and even manipulates it

       return ???  // Some other value, perhaps from the previous stuff you did
    }
}

If you need to return multiple values, there are structures for that, such as a Tuple, though beware this can be difficult to maintain as well:
public class HelperClass()
{
    public Tuple<int,string> Function4(string input)  // I need a better name ;p
    {
       // Do a bunch of stuff that depends on the input value and even manipulates it

       return Tuple.Create(200, "Success!");
    }
}

Or just create another small class, to create an instance of, populate with data, and return back to the calling method in your original Form.

