#c# #.net #winforms
#c# #.net #winforms
Вопрос:
Я получил пользовательский элемент управления под названием PicturePanel. В событиях мыши (MouseDown, MouseMove, MouseUp) у меня есть следующее:
protected override void OnMouseDown(MouseEventArgs e)
{
if (marquee == true amp;amp; e.Button == MouseButtons.Left amp;amp; BackgroundImage != null)
{
//Code to create rectangular marquee
}
else
{
}
}
Переменная уровня класса private bool marquee = false
по умолчанию. И общедоступный.
private bool marquee = false;
public bool Marquee
{
get { return marquee; }
set { marquee = value; }
}
Я даже пытался назначить инициализацию false
at:
public PicturePanel()
{
InitializeComponent();
marquee = false;
}
Но marquee всегда имеет значение true по умолчанию. Если я хочу отключить выделение, я должен установить его через общедоступную переменную picturePanel1.Marquee = false
в форме. Как я могу сделать marquee false по умолчанию в пользовательском элементе управления?
Комментарии:
1. Лучше всего использовать default (T), где T может быть любым типом, который отправляет LHS, когда вы в замешательстве. bool someValue = default(bool);
Ответ №1:
Я не уверен, что это то, о чем вы говорите, но если вы имеете в виду значение по умолчанию, которое вы видите в конструкторе, то вам просто нужно добавить следующий атрибут к своему свойству:
[DefaultValue(false)]
public bool Marquee
...
Комментарии:
1. Поскольку вы затронули дизайнера, я вернулся и проверил. Я не учел, что существующие элементы управления, которые я перетащил в форму, не обновляются с изменениями в классе пользовательского элемента управления. Новые элементы управления, которые я перетаскиваю в форму, имеют маркер как false.
Ответ №2:
Ну, логические значения всегда false по умолчанию. У вас случайно нет локальной переменной с именем marquee или что-то в этом роде?
Просто установите точку останова включенной private bool marquee = false;
и выполните пошаговое выполнение своего кода, и вы найдете ее довольно быстро.
Комментарии:
1. Нет, есть только одна переменная marquee, которую я объявил вверху. Кроме того, если бы это было правдой, то моя общедоступная переменная
Marquee
не дала бы мне ожидаемого поведения. Я могу включать и выключать режим выделения сpicturePanel1.Marquee = true
помощью илиpicturePanel.Marquee = false
. Но я хочу, чтобы по умолчанию шатер был выключен. И я попытался явно установить для него значение false в классе PicturePanel.2. Логические значения @Ryder по умолчанию определенно равны false. Взгляните на документацию. msdn.microsoft.com/en-us/library/c8f5xwh7.aspx
Ответ №3:
Ваша проблема может заключаться в том, что когда вы используете конструктор для «рисования» элемента управления в форме, он может регистрировать событие наведения курсора мыши, устанавливая для маркера значение true. Вы можете предотвратить это, проверив this.DesignMode
свой обработчик событий.
Пример:
if (this.DesignMode) return;