4 Stimmen

Wie kann ich einen Delphi TSpeedButton oder SpeedButton in C# 2.0 erstellen?

Wie kann ich einen Delphi TSpeedButton oder SpeedButton in C# 2.0 erstellen?

5voto

reSPAWNed Punkte 1089

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...

4voto

Bevan Punkte 42255

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.

0voto

JamesSugrue Punkte 14661

Hat este helfen? Sieht aus, als müssten Sie das OnPaint-Ereignis behandeln und den Fokus nicht übernehmen...

0voto

Osama Al-Maadeed Punkte 5573

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X