[C# WinForm][Вопрос] BorderSize

DaVilka

Интересующийся
Местный
#1
Выставил по умолчанию BorderSize = 1, но при нажатии на кнопку он меняется на 2, хотя отладчик говорит что он так и остался 1, пытался явно присвоить 1 в обработчике события PageUp/Down, те же яйца. Почему так?
 

Daan Raven

Свой человек
Проверенный
#5
Это все стили винды. Попробуй полностью отключить стили и посмотри, что будет. На крайняк вручную кнопку рисуй.
А вообще, WinForms устарел, профитней юзать WPF.
 

DaVilka

Интересующийся
Местный
#6
Это все стили винды. Попробуй полностью отключить стили и посмотри, что будет. На крайняк вручную кнопку рисуй.
А вообще, WinForms устарел, профитней юзать WPF.
Если отключить то все норм, рисовать и так и так придется, просто интересно в чем дело, заметил - если убрать фокус из кнопки то бордерсайз стает 1
 

Daan Raven

Свой человек
Проверенный
#7
Если отключить то все норм, рисовать и так и так придется, просто интересно в чем дело, заметил - если убрать фокус из кнопки то бордерсайз стает 1
А там вроде при фокусе не бордер, а inner glow эффект.
 

Daan Raven

Свой человек
Проверенный
#9
Вот тут я вряд ли помощник. Хотя 90% нужно идти в документацию Win32 API. Поройся в сторону отрисовки той же кнопки, учитывая стили Windows (так как по дефолту оно не юзает стили).

UPD: Не уверен, поможет ли, так как быстро пробежался глазами, но вот.
 
Последнее редактирование:

DaVilka

Интересующийся
Местный
#10
Вот тут я вряд ли помощник. Хотя 90% нужно идти в документацию Win32 API. Поройся в сторону отрисовки той же кнопки, учитывая стили Windows (так как по дефолту оно не юзает стили).

UPD: Не уверен, поможет ли, так как быстро пробежался глазами, но вот.
upload_2018-5-4_19-31-42.png


ты не знаешь как этот бордюр убрать? Появляется при потере фокуса после клика, но не всегда, магия какая то
 

DaVilka

Интересующийся
Местный
#11
Вот тут я вряд ли помощник. Хотя 90% нужно идти в документацию Win32 API. Поройся в сторону отрисовки той же кнопки, учитывая стили Windows (так как по дефолту оно не юзает стили).

UPD: Не уверен, поможет ли, так как быстро пробежался глазами, но вот.
А еще, если нажать кнопку, и форма потеряет фокус, то во круг кнопки появляется обводка даже если BorderSize = 0
upload_2018-5-4_19-34-48.png
 

Daan Raven

Свой человек
Проверенный
#12
А еще, если нажать кнопку, и форма потеряет фокус, то во круг кнопки появляется обводка даже если BorderSize = 0
Посмотреть вложение 23503
Как вариант, создать класс-наследник от Button и в конструкторе или в OnPaint`е вызвать:
SetStyle(ControlStyles.Selectable, false);
В этом случае кнопке нельзя будет присвоить фокус, т.е. табом теперь ее не выбирает.

UPD: Если же фокус нужен, то есть еще вариант:
Создаем класс-наследник от Button и переопределяем свойство ShowFocusCues на возвращение false:
protected override bool ShowFocusCues => false;
А в неактивном окне применяется цвет рамки, поэтому задаем цвет рамки прозрачный. Через панель свойств это нельзя сделать почему-то, поэтому идем в код и задаем цвет рамки вручную:
this.button1.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(0, 255, 255, 255);
В этом случае ShowFocusCues запретит показывать рамку вокруг текста при фокусе, а прозрачный цвет поможет визуально избавиться от рамки при потере фокуса окна (хотя сама рамка остается).
Можно еще попробовать поколдовать с GotFocus кнопки и Deactivate окна.
 
Последнее редактирование:
Сверху Снизу