Как изменить модификатор управления к Статическому в Visual Studio

когда я создаю управление перетаскиванием, VS автоматически генерирует код как это:

public System.Windows.Forms.Label label1;

Когда я хочу изменить модификатор того управления к Статическому, я перехожу к Form1. Designer.cs и редактирование к:

public static System.Windows.Forms.Label label1;

Это в порядке. Но когда я изменяю каждое управление, VS автоматически изменяют его на источник :(. Таким образом, как делают Вы изменяетесь, изменяют управления к помехам?

извините, я плох в английском языке :(


код из комментария:

public static void setLabelInfoVisible(bool visible) 
{ 
   if (Form1.labelInfo.InvokeRequired) 
   { 
      setLabelInfoVisibleDelegate del =
         new setLabelInfoVisibleDelegate(setLabelInfoVisible);
      Form1.labelInfo.Invoke(del, new object[] { visible }); 
   } 
   else 
   { 
     Form1.labelInfo.Visible = visible; 
   } 
}
6
задан Henk Holterman 12 January 2010 в 22:56
поделиться

5 ответов

Код дизайнера не должен модифицироваться пользователем, так как он переписывается Visual Studio каждый раз, когда вы вносите изменения в форму в дизайнере (как вы обнаружили).

Одним из способов продвижения является перенос управляющих деклараций и инициализации в файл с недизайнерским кодом. Однако, это означает, что ваш элемент управления больше не будет отображаться в дизайнере.

Редактирование: Это , а не способ сделать свои элементы управления доступными для других потоков! Я не могу придумать веской причины для того, чтобы сделать управление статическим.

4
ответ дан 8 December 2019 в 14:43
поделиться
121 --- 3894542-

Похоже, что ваша фактическая проблема - это еще одна: обновление элементов управления из другого потока. Это должно не выполнено статическими элементами управления!

Эти связанные вопросы должны решить вашу проблему:

Как обновить TextBox на GUI из другого потока в C #

Как обновить GUI из другого потока в C #?

6
ответ дан 8 December 2019 в 14:43
поделиться

Нужно перенести определение из кода автогенерируемого дизайнера, из файла. Формуляр.cs к вашему коду Форма.cs.

2
ответ дан 8 December 2019 в 14:43
поделиться

Уэйн,

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

  2. Не редактируйте в файлах * .designer.cs. Инструменты (формы / набор данных / ... дизайнеров) имеют право перезаписать все.

Редактировать:

У вас есть 2 проблемы для решения,

  1. доступа к контролю от другого класса. Это должно быть сделано, передавая ссылку на экземпляр этого другого класса. Что-то вроде:
    void form1_load (..) {otealobject.form = это; }

  2. Использование элемента управления формирование другого потока. Вы никогда не можете сделать это напрямую, всегда используете Control.invoke (). ДиВО перечислены 2 полезных ссылки.

4
ответ дан 8 December 2019 в 14:43
поделиться

Возможно, вы можете создать новый класс, который наследует под вопросом контроля, а затем применить к нему синглтон.

Таким образом, у вас есть глобальный (резьба безопасной) точка доступа к нему.

0
ответ дан 8 December 2019 в 14:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: