О статических и нестатических элементах
Существует два типа членов типа: нестатический и статический. Нестатические члены также называются членами экземпляра, поскольку они появляются в экземплярах объекта типа. Статические члены привязаны к самому типу, а не к его экземплярам объекта, поэтому вы можете использовать их без фактического создания экземпляра типа.
Рассмотрим следующее:
class MyClass
{
// static member: can NOT reference 'this', as it is not in the context of an object instance of the type
public static bool IsTrue()
{
return true;
}
// constructor: this runs whenever the type is instantiated
public MyClass()
{
}
// instance member: can access to 'this', which references the context object instance of the type
public int GetNumber()
{
return 42;
}
}
Вы можете использовать вышеуказанный тип следующим образом:
if(MyClass.IsTrue()) // static call
{
var myObject = new MyClass(); // constructor call
int result = myObject.GetNumber(); // instance member call
Console.WriteLine(result);
}
К вашей конкретной проблеме ...
Если вы абсолютно уверены, что вам нужна эта логика внутри статического метода, вам нужно получить экземпляр объекта формы, которую вы хотите изменить.
К сожалению, синглтоны работают не очень хорошо, потому что дизайнеру VS нужно создать экземпляр объекта вашей формы, который явно нарушает шаблон синглтона.
То, что вы все еще можете использовать, (в случае приложения Windows Forms): Application.OpenForms . Это возвращает доступную только для чтения коллекцию, которая содержит все открытые в данный момент формы приложения. Вы можете использовать это, чтобы найти экземпляр объекта формы, которую вы хотите изменить, и затем выполнить это изменение.
Имейте в виду, что если это многопоточная ситуация (т. Е. Статический метод выполняется в потоке, отличном от потока GUI), вам придется использовать какой-либо механизм синхронизации, например InvokeRequired и Invoke () .