2010-12-13 16 views
4

Ich versuche, ein Formular mit weißem Etikett im Inneren zu erstellen, dass, wenn ich auf etwas klicke, das Formular verschwindet und nur das Etikett zeigt. Bisher habe ich versucht, den TransparencyKey auf Lime zu setzen und wenn ich auf etwas klicke, ändere ich die BackColor in Lime und setze den FormBorderStyle auf None. Aber das Problem ist mit dem, was ich gerade mache ist, dass das weiße Etikett keine Grenzen hat, so dass Sie es nicht wirklich sehen können. Ich weiß über die BorderStyle-Eigenschaft und das ist nicht was ich will, ich möchte die Grenze genau um den Text, so dass Sie den Text über andere Dinge sehen können. Gibt es eine Möglichkeit, einem Etikett Rahmen hinzuzufügen?Wie kann ich Rahmen zum Beschriften von Windows Forms hinzufügen?

Hier ist mein Code, übrigens:

private void label1_Click(object sender, EventArgs e) 
{ 
    if (BackColor == Color.Lime) 
    { 
     FormBorderStyle = FormBorderStyle.Sizable; 
     BackColor = Color.Black; 
     Location = new Point(Left - 8, Top - 30); 
    } 
    else 
    { 
     FormBorderStyle = FormBorderStyle.None; 
     BackColor = Color.Lime; 
     Location = new Point(Left + 8, Top + 30); 
    } 
} 
+0

können Sie Ihren Code zeigen? – Derek

+0

Wenn Sie das Etikett jetzt nicht sehen können, warum sollten Sie es * verkleinern *? Das macht es sogar schwer, zurück zu finden. Mach es * größer * mit einer (hoffentlich) kontrastierenden BackColor. –

+0

Ich habe die Größe überhaupt nicht geändert ... – Cokegod

Antwort

3

Na sicher; Es gibt eine BorderStyle-Eigenschaft auf Label, die auf FixedSingle oder Fixed3D festgelegt werden kann. FixedSingle ist ein Einzelpixel-Rahmen in der ForeColor-Farbe, während Fixed3D ein abgeschrägter 3D-Rahmen ist, der Graustufen des Hintergrunds der Beschriftung verwendet.

EDIT: OK, ein bisschen mehr Detail, was genau benötigt wird. Wie ich es sehe, haben Sie ein paar Möglichkeiten.

  1. Legen Sie zwei Etiketten, einer auf dem anderen, mit dem gleichen Inhalt und Formatierung mit Ausnahme des in Rückseite ist weiß und das man vor ist schwarz, und das Etikett auf der Rückseite von den einen Versatz in um ein Pixel in der X- und/oder Y-Dimension. Sie erhalten einen weißen "Schatten" hinter dem schwarzen Text. Sie könnten sogar vier Etiketten erstellen, die jeweils 1 Pixel in X und Y versetzen, um einen vollständigen "Heiligenschein" zu erhalten. Sie könnten dies als Benutzersteuerelement einrichten, wenn Sie dies an mehreren Stellen tun möchten; Legen Sie den Text des Steuerelements einmal fest, und das Steuerelement füllt alle 5 Beschriftungen. Sie könnten versuchen, mit der Schriftgröße oder dem Gewicht zu spielen, aber ich bezweifle, dass Sie etwas bekommen, das richtig aufgereiht ist und in allen Fällen einen perfekten 1-Pixel-Rand um die Buchstaben hat.

  2. Erstellen Sie ein Bild Ihres Textes auf einem magentafarbenen Hintergrund, klingeln Sie es in weiß, und speichern Sie es als Bitmap mit dem magentafarbenen Keyed als transparente Farbe. Verwenden Sie dann das Bild in der Beschriftung (oder einer PictureBox).

+1

+1 für die erste –

2

Stellen Sie die BorderStyle Eigenschaft des Label-Steuerelement zu FixedSingle

1

Was ist mit der Eigenschaft borderstyle? Setzen Sie es in den Eigenschaftsfenstern auf FixedSingle.

7

Wenn jemand noch sucht, hier ist das, was ich habe (vor allem aus this Site kopiert)

eine neue Klasse erstellen, CustomLabel.cs zum Beispiel. Hier ein Beispiel:

public class CustomLabel : Label 
    { 
     protected override void OnPaint(PaintEventArgs e) 
      { 
      base.OnPaint(e); 
      ControlPaint.DrawBorder(e.Graphics, ClientRectangle, 
              Color.Red, 5, ButtonBorderStyle.Solid, 
              Color.Red, 5, ButtonBorderStyle.Solid, 
              Color.Red, 5, ButtonBorderStyle.Solid, 
              Color.Red, 5, ButtonBorderStyle.Solid); 
      } 
    } 

Sie können es dann wie folgt verwenden:

  Form newForm = new Form(); 

      CustomLabel newLabel = new CustomLabel(); 
      newForm.Controls.Add(newLabel); 

      newLabel.BackColor = Color.Black; 
      newLabel.Font = new System.Drawing.Font("Microsoft Arial", 18F, 
      FontStyle.Regular, GraphicsUnit.Point, ((byte)(0))); 
      newLabel.ForeColor = Color.Crimson; 
      newLabel.Text = "Some text on a topmost transparent form window"; 

      newForm.Show(); 
      newForm.TopMost = true; 

      newLabel.AutoSize = true; 
      newLabel.Location = new Point(230, 375); 
Verwandte Themen