2016-03-29 4 views
0

Я пытаюсь получить доступ к функции в виде мою Windows Forms приложение из класса ребенка файл, и он дает ошибкуформы вызова от дочернего объекта

«Ссылка на объекте требуется для нестатического метод, поле или свойство «Form1.UpdateCube()»»

Я называю это из класса Cube.cs, и вызов выглядит следующим образом:

Form1.UpdateCube(); 

и это функция UpdateCube в Form1.cs:

public void UpdateCube() 
{ 
    if (BTL.BackColor != mapColor(c1.B.TR)) 
    { 
     BTL.BackColor = mapColor(c1.B.TR); 
     System.Console.Write("Mapping"); 
    } 
    //And so on 
} 

Почему я не могу получить доступ к функции в Form1?

+2

знак 'UpdateCube' как' static' –

+0

@AdnanUmer Тогда он не сможет получить доступ к статическим членов, и по этой причине они не скомпилируются. – Servy

+0

Если вы не создали экземпляр класса ('var formRef = new Form1()'), или ссылка исчезла из области, то вы получите эту ошибку. Хотя, если вы показываете форму, у вас должно быть это где-то уже. – ChrisF

ответ

0

Как указано в сообщении об ошибке, вы можете вызывать методы экземпляра только для экземпляра класса, а не для самого типа. Поэтому вам нужно указать экземпляр Form1, чтобы позвонить по телефону UpdateCube.

Самым простым решением является, вероятно, пройти текущий экземпляр в при создании дочернего класса, как это:

public class SomeClass 
{ 
    private readonly Form1 parent; 

    public SomeClass(Form1 form) 
    { 
     this.parent = form; 
    } 

    public void DoStuff() 
    { 
     this.parent.UpdateCube() 
    } 
} 

public partial class Form1 
{ 
    private SomeClass CreateChild() 
    { 
     return new SomeClass(this); 
    } 

    public void UpdateCube() 
    { 
     if (BTL.BackColor != mapColor(c1.B.TR)) 
     { 
      BTL.BackColor = mapColor(c1.B.TR); 
      System.Console.Write("Mapping"); 
     } 
     //And so on 
    } 

    // The rest of the class 
} 
+0

Разве это не инициализация формы из куба .cs? Это не то, что я хочу, так как весь код написан для того, чтобы иметь cube.cs как дочерний элемент Form1.cs (отсюда заголовок вопроса) – MattyAB

+0

Нет, вы не инициализируете форму в Cube.cs. Вы только сохраняете ссылку на существующий экземпляр 'Form1' в Cube.cs, чтобы вы могли использовать его для вызова' UpdateCube' –

+0

Это похоже на правильную вещь ... Она скомпилирована в порядке, но когда я ее запустил он разбился VS D: – MattyAB

Смежные вопросы