如何在C#2.0中创建Delphi TSpeedButton或SpeedButton?

时间:2008-10-21 19:38:51

标签: c# delphi

如何在C#2.0中创建Delphi TSpeedButton或SpeedButton?

4 个答案:

答案 0 :(得分:3)

我想知道你是想创建像TSpeedButton这样的控件,还是只需要同样的最终结果......

从头开始编程当然是可能的,但我只是将其作为一种学习练习来解决。

假设你想要达到类似的最终结果......

Delphi的TSpeedButton与开发人员认为有用的标准TButton存在差异 - 它是扁平的,没有关注,并且它比常规按钮消耗的资源更少(因为它没有底层的Windows Handle)。 / p>

以下哪项对您很重要?

如果您只想要一个不接受焦点的平面按钮,请使用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中,可用句柄的数量远远高于每个进程,而不是系统范围。除非你创造了成千上万的按钮,否则你不太可能接近用完。

答案 1 :(得分:2)

使用Button并将TabStop属性设置为false仅在单击表单时有效...

如果你需要(就像我一样)点击它时没有被选中的按钮,我发现只有一种方法可以做到。

我这样做的方法是继承Button类并在构造函数中调用SetStyles,从而将Selectable设置为false,如下所示:

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

这对我来说很有用,如果你这样做是完美的有一个控制面板,带有按钮,可以对选定的对象执行操作......

答案 2 :(得分:0)

this有帮助吗?看起来你必须处理OnPaint事件,而不是关注...

答案 3 :(得分:0)

常规的.net 2.0按钮支持TSpeedbutton的部分内容:

  • 字形:图片
  • Flat: FlatStyle

它无法处理:

  • 向下
  • 集团

这两个是相关的,你可以从按钮继承,并且拥有它,添加Down和Group功能。

Codeproject has an example所有者提示按钮。