2015-10-08 4 views
0

У меня есть форма, использующая множество элементов управления. Некоторая логика этих элементов управления находится в других классах.Объекты формы доступа из частичного класса

Другие элементы логики так непосредственно привязаны к объектам формы (боксы, метки, кнопки и т. Д.), Что имеет смысл сохранить их в файле designer.cs формы. Объем кода становится слишком большим для меня в файле designer.cs, поэтому я хочу разбить этот код на частичный класс. Я также хочу, чтобы частичный класс имел неограниченный доступ к любому объекту в форме.

К сожалению, я не могу получить доступ к элементам управления формы. Во-первых, вот что я имею в месте моего теста (с помощью создания вне коробки нового проекта в Visual Studio 2015):

Form1.cs

namespace Project1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 
    } 
} 

Form1.Designer.cs

partial class Form1 
{ 
    /// <summary> 
    /// Required designer variable. 
    /// </summary> 
    private System.ComponentModel.IContainer components = null; 

    /// lots of other code generated by Visual Studio... 

... Позже в Form1.Designer.cs

private System.Windows.Forms.Label label1; 

И здесь возникает проблема в моих пользовательских частичных файлов класса называемый Form1.MoreCode.cs

namespace Project1 
{ 
    partial class Form1 
    { 
     label1. //nope! 
    } 
} 

Как вы можете видеть, я сделал попытку доступа к объекту формы с именем «label1» в файле designer.cs, но не мог. Я пытался сделать сам ярлык общественности, то я пытался сделать все классы общественности, как это:

public partial class form1 

... И как это:

private System.Windows.Forms.Label label1; 

Я сделал много исследований с небольшой помощью. Кто-то еще из Stack Overflow предлагает мой подход работать, но если я не пропустил что-то важное, это не так.

Также в моих исследованиях некоторые люди предлагают создать свойства объектов. Я действительно не хочу этого делать, потому что я просто хочу иметь обычный нормальный доступ к объектам, не выполняя все эти дополнительные шаги (может победить цель расщепления кода в первую очередь).

Не могли бы вы рассказать мне, возможно ли то, что я пытаюсь сделать? Если да, то какой подход я должен предпринять, чтобы сделать эту работу должным образом?

Спасибо.

+1

в конструкторе .. изменить уровень доступа метки из 'частного к public' – MethodMan

+1

или даже просто' protected' должны делать – monty

+1

Вы пытаетесь написать код непосредственно в класс? Не в функции? – Blorgbeard

ответ

1

Вы не можете писать код непосредственно в классе, частичном или нет. Поместите свой код в методе:

namespace Project1 
{ 
    partial class Form1 
    { 
     label1. //nope! 

     public void CodeGoesInHere() 
     { 
      label1.Text = "hello"; // yep! 
     } 
    } 
} 
+0

Большое спасибо. Это именно то, чего мне не хватало! – Bill

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