Wie kann ich einen Delphi TSpeedButton oder SpeedButton in C# 2.0 erstellen?
Antworten
Zu viele Anzeigen?Wenn Sie eine Schaltfläche verwenden und die Eigenschaft TabStop auf false setzen, funktioniert das nur, wenn Sie durch das Formular tippen...
Wenn Sie (wie ich) eine Schaltfläche benötigen, die nicht ausgewählt wird, wenn Sie darauf klicken, gibt es nur einen Weg, den ich gefunden habe, dies zu tun.
Ich habe es so gemacht, dass ich die Klasse Button unterklassifiziert habe und im Konstruktor SetStyles aufgerufen und damit Selectable auf false gesetzt habe, etwa so:
public class ButtonNoFocus : Button
{
public ButtonNoFocus()
: base()
{
base.SetStyle(ControlStyles.Selectable, false);
}
}
Das hat bei mir funktioniert und ist perfekt, wenn Sie z.B. ein Kontrollfeld mit Schaltflächen haben, die Aktionen für ein ausgewähltes Objekt ausführen...
Ich frage mich, wenn Sie ein Steuerelement wie ein TSpeedButton erstellen möchten, oder Sie brauchen nur gleiche Art von Endergebnis ...
Es ist sicherlich möglich, ein solches System von Grund auf zu programmieren, aber ich würde das nur als Lernübung in Angriff nehmen.
Angenommen, Sie wollen ein ähnliches Endergebnis erzielen ...
Der TSpeedButton von Delphi unterschied sich vom Standard-TButton, was die Entwickler als nützlich empfanden - er war flach, nahm den Fokus nicht an und verbrauchte weniger Ressourcen als ein normaler Button (weil er kein Windows-Handle zugrunde lag).
Welche davon sind für Sie wichtig?
Wenn Sie nur eine flache Schaltfläche wünschen, die den Fokus nicht akzeptiert, verwenden Sie eine normale Schaltfläche mit FlatStyle=Flat (oder PopUp) und TabStop=false. Sie können eine Glyphe konfigurieren, indem Sie entweder die Eigenschaft Image oder eine Kombination aus ImageList und ImageIndex/ImageKey festlegen.
Eine Alternative dazu wäre, nach einer vorhandenen Schaltflächenkomponente zu suchen, die Ihren Bedürfnissen nahe kommt - ein möglicher Ansatzpunkt wäre das Krypton Toolkit (kostenlos zu verwenden, siehe http://www.componentfactory.com/toolkit_buttoncontrols.php ).
Wenn Sie die Anzahl der von Ihrer Anwendung verbrauchten Ressourcen reduzieren wollen, werden Sie wahrscheinlich an anderer Stelle einen besseren Nutzen erzielen.
Zu Zeiten von Windows 3.1 (Delphi 1) und Windows 95 (Delphi 2) war die Anzahl der verfügbaren Handles streng begrenzt, wobei eine maximale Anzahl systemweit verfügbar war. Heute, mit Windows XP und Vista, ist die Anzahl der verfügbaren Handles weitaus höher, und die Anzahl ist pro Prozess, nicht systemweit. Wenn Sie nicht gerade Tausende von Schaltflächen erstellen, ist es sehr unwahrscheinlich, dass Ihnen die Anzahl der Handles ausgeht.
Hat este helfen? Sieht aus, als müssten Sie das OnPaint-Ereignis behandeln und den Fokus nicht übernehmen...
Der reguläre .net 2.0 Button unterstützt einen Teil dessen, was ein TSpeedbutton tut:
- Die Glyphe: Bild
- Wohnung : FlatStyle
Es wird nicht bearbeitet:
- Daunen
- Gruppe
Diese beiden sind miteinander verwandt, Sie könnten von der Schaltfläche erben und sie selbst zeichnen, indem Sie die Funktionen Abwärts und Gruppieren hinzufügen.
Codeproject hat ein Beispiel von Owndraw-Tasten.