如何在C#2.0中创建Delphi TSpeedButton或SpeedButton?
答案 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的部分内容:
它无法处理:
这两个是相关的,你可以从按钮继承,并且拥有它,添加Down和Group功能。
Codeproject has an example所有者提示按钮。