когда я создаю управление перетаскиванием, 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;
}
}
Код дизайнера не должен модифицироваться пользователем, так как он переписывается Visual Studio каждый раз, когда вы вносите изменения в форму в дизайнере (как вы обнаружили).
Одним из способов продвижения является перенос управляющих деклараций и инициализации в файл с недизайнерским кодом. Однако, это означает, что ваш элемент управления больше не будет отображаться в дизайнере.
Редактирование: Это , а не способ сделать свои элементы управления доступными для других потоков! Я не могу придумать веской причины для того, чтобы сделать управление статическим.
Похоже, что ваша фактическая проблема - это еще одна: обновление элементов управления из другого потока. Это должно не выполнено статическими элементами управления!
Эти связанные вопросы должны решить вашу проблему:
Нужно перенести определение из кода автогенерируемого дизайнера, из файла.
Формуляр.cs
к вашему коду Форма.cs
.
Уэйн,
Нет , вы не хотите, чтобы контроль был статичным. Объясните, почему вы думаете, что вы можете узнать, что являются лучшими альтернативами.
Не редактируйте в файлах * .designer.cs. Инструменты (формы / набор данных / ... дизайнеров) имеют право перезаписать все.
У вас есть 2 проблемы для решения,
доступа к контролю от другого класса. Это должно быть сделано, передавая ссылку на экземпляр этого другого класса. Что-то вроде:
void form1_load (..) {otealobject.form = это; }
Использование элемента управления формирование другого потока. Вы никогда не можете сделать это напрямую, всегда используете Control.invoke (). ДиВО перечислены 2 полезных ссылки.
Возможно, вы можете создать новый класс, который наследует под вопросом контроля, а затем применить к нему синглтон.
Таким образом, у вас есть глобальный (резьба безопасной) точка доступа к нему.