Как установить/изменить/удалить стиль фокуса на Кнопке в C#?

Вам нужно сделать что-то вроде этого -

public function store(Request $request)
{
    $request->validate($request, [
        'name' => 'required',
        'category_id' => 'required',
        'description' => 'required',
        'price' => 'required',
        'long_description' => 'required'
    ]);

    if (!$validator->fails()) {
        $product = new Product();
        foreach ($request->all() as $key => $value) {
            if ($key !== '_token') $product->$key = $value;
        }
        $product->save();

        return redirect('/admin/products');
    } else {
        \Session::flash('errors', $validator->messages());

        return redirect()->back()->withInput();
    }
}

Я сделал два изменения в вашем коде -

  1. Добавил метод проверки по $ request вместо $ this. [111 ]
  2. Добавлена ​​проверка на неудачную проверку и отправлены эти ошибки через сеанс.
24
задан 29 September 2008 в 13:51
поделиться

9 ответов

Другая опция (хотя немного hacktastic) состоит в том, чтобы присоединить обработчик событий к событию GotFocus кнопки. В том обработчике событий передайте значение Лжи к методу кнопки NotifyDefault(). Так, например:

void myButton_GotFocus(object sender, EventArgs e)
{
  myButton.NotifyDefault(false);
}

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

6
ответ дан 28 November 2019 в 22:21
поделиться

Существует иначе который работы хорошо для плоских стилизованных кнопок. Не используйте кнопки, но маркировки. Поскольку Вы полностью заменяете UI для кнопки, это не имеет значения ли Ваше использование кнопочное управление или маркировка. Просто обработайте щелчок таким же образом.

Это работало на меня, хотя не большая практика это - хороший взлом и, пока Вы называете кнопку, очевидно (и комментируете источник), другие кодеры возьмут идею.

Ryan

2
ответ дан 28 November 2019 в 22:21
поделиться

Вторая граница, которая добавляется, является стандартом Windows "кнопка по умолчанию" граница. Вы, возможно, заметили, что, если Вы снабжаете вкладками через большинство диалоговых окон с несколькими кнопками (такими как какое-либо окно свойств Control Panel), исходная "дважды ограниченная" кнопка становится "нормальной", и в кнопке фокусировки становится "дважды ограниченным".

Это не, обязательно фокусируются на работе, а скорее визуальном признаке действия, предпринятого путем удара клавиши Enter.

Это звучит мне, как Вы действительно не заботятся о той внутренней работе. Вы хотите, чтобы дисплей не имел две границы - полностью понятный. Внутренняя работа должна объяснить, почему Вы видите это поведение. Теперь... Попытаться зафиксировать его.

первая вещь я попробовал бы - и принял бы во внимание, я не проверил, это - является взломом. Когда кнопка получит фокус (таким образом, получение двойной границы), выключите свою единственную границу. Вы могли бы получить эффект, который Вы хотите, и это довольно просто. (Рычаг в событие Focus. Еще лучше разделите Кнопку на подклассы и переопределите OnFocus, затем используйте тот подкласс для своих будущих кнопок.)

Однако, который мог бы представить новые, неловкие визуальные побочные эффекты. В той вене - и потому что взломы редко являются лучшим ответом - я должен "официально" рекомендовать то, что сказали другие: Пользовательская краска кнопка. Хотя код здесь может быть излишеством, этот , ссылка в CodeProject обсуждает, как сделать это (ссылка VB; Вы должны будете перевести). В настоящем пользовательском режиме, необходимо быть в состоянии избавиться от той второй границы полностью.

1
ответ дан 28 November 2019 в 22:21
поделиться

Конечно, можно потянуть кнопку сами. Один из флагов состояния фокусируется.

Так на событие ничьей, если флаг фокусируется разрешение и тянет кнопку, как Вам нравится, иначе просто, передайте его на базовый метод.

0
ответ дан 28 November 2019 в 22:21
поделиться

Рассмотрите реализацию Вашего собственного кода для прорисовки для кнопки. Тем путем Вы имеете полный контроль. В прошлом я реализовал свою собственную производную Управления, что пользовательские краски, моя кнопка и реализует все характеристики кнопки в моих целях, но необходимо быть в состоянии переопределить рисование кнопки и сделать это сами, таким образом, управляя, как это тянет в каждом состоянии, включая, когда сфокусировано.

0
ответ дан 28 November 2019 в 22:21
поделиться

Установите свойство FocusVisualStyle зависимости к пустому указателю в Вашем стиле, и пунктирная граница закончится.

Из MSDN: Моделирование для Фокуса в Средствах управления и Windows Presentation Foundation (WPF) FocusVisualStyle

обеспечивают два параллельных механизма для изменения общего вида управления, когда это получает клавиатурный фокус. Первый механизм должен использовать методы set свойства для свойств, таких как IsKeyboardFocused в стиле или шаблоне, который применяется к управлению. T он второй механизм должен обеспечить отдельный стиль как значение свойства FocusVisualStyle; визуальный стиль "фокуса" создает отдельное визуальное дерево для adorner, который тянет сверх управления, вместо того, чтобы изменить визуальное дерево управления или другого элемента UI путем замены его. Эта тема обсуждает сценарии, где каждый из этих механизмов является соответствующим.

дополнительная граница , который Вы видите, определяется FocusVisualStyle а не в шаблоне управления, таким образом, необходимо удалить или переопределить стиль для удаления границы.

0
ответ дан 28 November 2019 в 22:21
поделиться

Действительно ли это - эффект, который Вы ищете?

public class NoFocusCueButton : Button
{
    protected override bool ShowFocusCues
    {
        get
        {
            return false;
        }
    }
}

можно использовать этот класс пользовательской кнопки точно так же, как обычная кнопка, но он не даст Вам дополнительный прямоугольник на фокусе.

38
ответ дан 28 November 2019 в 22:21
поделиться

Если у вас есть текстовое поле и кнопка затем при событии textchange текстового поля напишите button1.focus ();

Будет работать.

0
ответ дан 28 November 2019 в 22:21
поделиться

Создайте пользовательскую кнопку:

public partial class CustomButton: Button
{
    public ButtonPageButton()
    {
        InitializeComponent();

        this.SetStyle(ControlStyles.Selectable, false);
    }
}

Это избавит от раздражающей границы! ; -)

15
ответ дан 28 November 2019 в 22:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: