#c# #static #checkbox
#c# #статический #флажок
Вопрос:
У меня есть флажок, который я создал для Windows forms, как я могу установить его на статический?
public static CheckBox checkthis;
Этот код создает новый как статический, то, что я хочу сделать, это установить тот, который я создал в конструкторе, на статический.
Обновить:
Я попробовал приведенный ниже ответ, и это сработало, хотя флажок исчез из формы и возникли различные другие проблемы. Вместо этого я сделал это, создал новый и сделал это:
public static CheckBox checkthisnew;
...
checkthisnew = checkthis;
В любом случае, теперь я понял, что у меня сбой и что я просто могу использовать состояние, измененное в списке событий, так что все хорошо…
Извините, что не прояснил мои рассуждения по этому поводу, но я ценю ваши ответы, спасибо.
Комментарии:
1. Почему вы хотите, чтобы это было статичным? Вероятно, есть лучший способ сделать то, что вы хотите … возможно, опубликуйте немного больше информации о том, что вы пытаетесь сделать.
2. С какой стати вы вообще хотите, чтобы ваш флажок был статичным?
3. Что я действительно пытаюсь сделать, так это проверить его состояние из другого класса, и я понял, что если он статичен, то мне не придется создавать экземпляр класса…
Ответ №1:
Отредактируйте MyForm.Designer.cs
файл прямо там, где находится объявление для вашего флажка. Обратите внимание, что ваши изменения будут отменены, если вы снова используете конструктор для изменения пользовательского интерфейса, поэтому вам придется сделать это снова.
Комментарии:
1. @Zizo47 — Мне любопытно, почему вы это делаете. Убедитесь, что вы также прочитали ответ Джеффа.
Ответ №2:
Ничего хорошего не может получиться, если сделать статичным зависимый элемент управления пользовательского интерфейса. Одно дело сделать компонент статичным, и это могло бы быть нормально, но для чего-то вроде CheckBox
вы просто напрашиваетесь на неприятности. Для начала, у одного элемента управления может быть только один родительский элемент. Таким образом, вы не можете просто создать один экземпляр вашего элемента управления и ожидать, что сможете добавить его в несколько форм, и все волшебным образом будет синхронизировано. Если вам нужно предоставить общий доступ к некоторым значениям, сделайте это правильно и привяжитесь к ним, зарегистрируйте некоторые события, предоставьте общий доступ к значению, а не к элементу управления, который содержит значение, или другими подобными методами.
Я также не могу рекомендовать вам изменять сгенерированные файлы (особенно, если они сгенерированы с помощью инструмента, который вы используете постоянно). Если вы должны настаивать на том, чтобы элемент управления был статическим, объявите его в вашем исходном файле для класса, а не в файле, созданном дизайнером, классы объявляются partial
не просто так.
Вероятно, вы пытаетесь поделиться каким-то bool
значением, которое CheckBox
представляет. Сделайте это статическим свойством.
public partial class MyForm : Form
{
public static bool IsToggled { get; set; }
}
Если где-то в будущем вы захотите привязать это к событию или чему-то еще, вы всегда можете изменить реализацию средств доступа.
Ответ №3:
Хм … без дополнительного контекста я бы предложил использовать для этого общедоступное логическое свойство. Иметь статичный элемент пользовательского интерфейса — не очень хорошая идея.
Попробуйте что-то вроде этого:
public class MyForm : Form
{
public static bool IsWhateverSet {get; private set;}
}