ANTICHAT

ANTICHAT (https://forum.antichat.io/index.php)
-   С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby (https://forum.antichat.io/forumdisplay.php?f=24)
-   -   [C# WinForm][Вопрос] BorderSize (https://forum.antichat.io/showthread.php?t=769859)

DaVilka 30.04.2018 14:52

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

ZubasticZubastic верифицированный пользователь. 30.04.2018 15:36

Бордер чего? Формы?

DaVilka 30.04.2018 15:37

Цитата:

Сообщение от Zubastic

Бордер чего? Формы?

Кнопки

DaVilka 30.04.2018 15:38

Цитата:

Сообщение от Zubastic

Бордер чего? Формы?

разве у формы есть бордерсайз?

Mizuwokiru 30.04.2018 17:02

Это все стили винды. Попробуй полностью отключить стили и посмотри, что будет. На крайняк вручную кнопку рисуй.

А вообще, WinForms устарел, профитней юзать WPF.

DaVilka 01.05.2018 00:13

Цитата:

Сообщение от Mizuwokiru

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

Если отключить то все норм, рисовать и так и так придется, просто интересно в чем дело, заметил - если убрать фокус из кнопки то бордерсайз стает 1

Mizuwokiru 01.05.2018 02:00

Цитата:

Сообщение от DaVilka

Если отключить то все норм, рисовать и так и так придется, просто интересно в чем дело, заметил - если убрать фокус из кнопки то бордерсайз стает 1

А там вроде при фокусе не бордер, а inner glow эффект.

DaVilka 01.05.2018 02:20

Цитата:

Сообщение от Mizuwokiru

А там вроде при фокусе не бордер, а inner glow эффект.

а как его убрать?

Mizuwokiru 01.05.2018 02:33

Цитата:

Сообщение от DaVilka

а как его убрать?

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

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

DaVilka 04.05.2018 20:37

Цитата:

Сообщение от Mizuwokiru

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

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

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

DaVilka 04.05.2018 20:39

Цитата:

Сообщение от Mizuwokiru

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

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

А еще, если нажать кнопку, и форма потеряет фокус, то во круг кнопки появляется обводка даже если BorderSize = 0

Mizuwokiru 04.05.2018 22:44

Цитата:

Сообщение от DaVilka

А еще, если нажать кнопку, и форма потеряет фокус, то во круг кнопки появляется обводка даже если BorderSize = 0

Как вариант, создать класс-наследник от 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 окна.


Время: 21:20