c# WinForm: Удалите или Настройте 'Прямоугольник фокусировки' для Кнопок

Я думаю, что про аргумент LINQ, кажется, прибывает от людей, у которых нет истории с разработкой базы данных (в целом).

Особенно при использовании продукта как DB VS Pro или Комплект Команды, многие аргументы, приведенные здесь, не применяются, например:

Тяжелее, чтобы поддержать и Протестировать: VS обеспечивает проверку полного синтаксиса, проверку стиля, справочную и ограничительную проверку и т.д. Это также обеспечивает полные возможности поблочного тестирования и инструменты рефакторинга.

LINQ делает истинное поблочное тестирование невозможным как (в моем уме), это проваливает Тест на кислотность.

Отладка легче в LINQ: Почему? VS позволяет полный неродной в от управляемого кода и регулярной отладки SPS

Скомпилированный в единственный DLL, а не сценарии развертывания: Еще раз VS приходит на помощь, где он может создать и развернуть полные базы данных или внести безопасные от данных возрастающие изменения.

не должны изучать TSQL с LINQ: Нет Вы не делаете, но необходимо ли изучить LINQ - где преимущество?

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

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

, Прежде чем Вы все будете расстроены, я думаю, что LINQ имеет свое место и имеет главное будущее. Но для сложных, информационно емких приложений я не думаю, что это готово занять место хранимых процедур. Это было представлением, которое я повторил MVP в TechEd в этом году (они останутся неназванными).

РЕДАКТИРОВАНИЕ: LINQ стороне Хранимой процедуры SQL вещей - что-то, что я все еще должен считать больше на - в зависимости от того, что я нахожу, что могу изменить мой выше резкой критики;)

12
задан Zion 9 November 2009 в 12:27
поделиться

2 ответа

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

using System;
using System.Drawing;
using System.Windows.Forms;
using System.Windows.Forms.VisualStyles;

class MyButton : Button {
    private VisualStyleRenderer renderer;
    protected override void OnPaint(PaintEventArgs e) {
        base.OnPaint(e);
        if (this.Focused && Application.RenderWithVisualStyles && this.FlatStyle == FlatStyle.Standard) {
            if (renderer == null) {
                VisualStyleElement elem = VisualStyleElement.Button.PushButton.Normal;
                renderer = new VisualStyleRenderer(elem.ClassName, elem.Part, (int)PushButtonState.Normal);
            }
            Rectangle rc = renderer.GetBackgroundContentRectangle(e.Graphics, new Rectangle(0, 0, this.Width, this.Height));
            rc.Height--;
            rc.Width--;
            using (Pen p = new Pen(Brushes.DarkGray)) {
                e.Graphics.DrawRectangle(p, rc);
            }
        }
    }
}
13
ответ дан 2 December 2019 в 05:54
поделиться

Создайте подкласс класса Button и переопределите OnPaint. Если ваше переопределение не вызывает base.OnPaint, для кнопки ничего не будет отображаться, и вы получите полный контроль (включая прямоугольник фокуса).

0
ответ дан 2 December 2019 в 05:54
поделиться
Другие вопросы по тегам:

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