Как я могу создать Delphi TSpeedButton или SpeedButton в C # 2.0? - PullRequest
3 голосов
/ 21 октября 2008

Как мне создать Delphi TSpeedButton или SpeedButton в C # 2.0?

Ответы [ 4 ]

3 голосов
/ 22 октября 2008

Мне интересно, хотите ли вы создать элемент управления, такой как TSpeedButton, или вам просто нужен такой же конечный результат ...

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

Предполагая, что вы хотите достичь аналогичного конечного результата ...

Delphi TSpeedButton отличался от стандартного TButton, который разработчики сочли полезным - он был плоским, не фокусировался и потреблял меньше ресурсов, чем обычная кнопка (потому что у него не было основного дескриптора Windows).

Что из этого важно для вас?

Если вам просто нужна плоская кнопка, которая не принимает фокус, используйте обычную кнопку с FlatStyle = Flat (или PopUp) и TabStop = false. Вы можете настроить глиф, задав либо свойство Image, либо комбинацию ImageList и ImageIndex / ImageKey.

Альтернативой этому может быть поиск существующего компонента кнопки, который соответствует вашим потребностям - одним из мест для поиска может быть Krypton Toolkit (бесплатное использование, см. http://www.componentfactory.com/toolkit_buttoncontrols.php).

Если вы хотите сократить количество ресурсов, потребляемых вашим приложением, скорее всего, вы получите лучшую отдачу, глядя в другое место.

Еще во времена Windows 3.1 (Delphi 1) и Windows 95 (Delphi 2) количество доступных дескрипторов было строго ограничено с максимальным количеством доступных для всей системы. Сегодня в Windows XP и Vista количество доступных дескрипторов намного выше, а число зависит от процесса, а не от всей системы. Если вы не создаете тысячи и тысячи кнопок, вы вряд ли приблизитесь к концу.

2 голосов
/ 11 февраля 2010

Использование кнопки и установка для свойства TabStop значения false работает только при нажатии на форму ...

Если вам нужна (как я сделал) кнопка, которая не выбирается при нажатии на нее, я нашел только один способ сделать это.

То, как я это сделал, заключалось в том, чтобы создать подкласс класса Button и в конструкторе, вызвав SetStyles и тем самым установив для Selectable значение false, например:

public class ButtonNoFocus : Button
{
    public ButtonNoFocus()
        : base()
    {
        base.SetStyle(ControlStyles.Selectable, false);
    }
}

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

0 голосов
/ 22 октября 2008

Обычная кнопка .net 2.0 поддерживает часть действия кнопки TSpeed:

  • Символ: Изображение
  • Квартира: FlatStyle

Не обрабатывает:

  • Вниз
  • Группа

Эти два связаны, вы можете наследовать от кнопки и владелец вытягивать ее, добавляя функции Down и Group.

В Codeproject есть пример кнопок владельца.

0 голосов
/ 22 октября 2008

это помогает? Похоже, вам придется обрабатывать событие OnPaint, а не фокусироваться ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...