2010-12-13 28 views
4

J'essaye de créer un formulaire avec l'étiquette blanche à l'intérieur, que quand je clique sur quelque chose le formulaire disparaîtra et montrera seulement l'étiquette. Jusqu'à présent, j'ai essayé de mettre la TransparencyKey sur Lime et quand je clique sur quelque chose, j'ai changé le BackColor en Lime et mettre le FormBorderStyle à None. Mais le problème est avec ce que je fais en ce moment, c'est que l'étiquette blanche n'a pas de frontières, donc vous ne pouvez pas vraiment le voir. Je connais la propriété BorderStyle et ce n'est pas ce que je veux, je veux que la bordure soit exactement autour du texte afin que vous puissiez voir le texte au-dessus d'autres choses. Est-il possible d'ajouter des bordures à une étiquette?Comment puis-je ajouter des bordures à étiqueter dans Windows Forms?

Voici mon code, par la voie:

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

peut vous montrer votre code? – Derek

+0

Si vous avez des problèmes pour voir l'étiquette maintenant, pourquoi voudriez-vous la rendre plus petite *? Cela le rend même difficile à retrouver. Faites-le * plus grand * avec un BackColor (heureusement) contrastant. –

+0

Je n'ai pas changé la taille du tout ... – Cokegod

Répondre

3

Bien sûr; Il existe une propriété BorderStyle sur Label qui peut être définie sur FixedSingle ou Fixed3D. FixedSingle est une bordure d'un seul pixel dans la couleur ForeColor, tandis que Fixed3D est une bordure 3D biseautée utilisant des niveaux de gris de l'arrière-plan de l'étiquette.

EDIT: OK, un peu plus de détails sur ce dont vous avez besoin. Comme je le vois, vous avez quelques options.

  1. mettre deux étiquettes, l'une sur l'autre, avec le même contenu et le formatage sauf celle à l'arrière est blanc et l'une en face est noire, et l'étiquette à l'arrière est décalé par rapport à celui de front par un pixel dans les dimensions X et/ou Y. Vous obtiendrez une "ombre" blanche derrière le texte noir. Vous pouvez même mettre en place quatre étiquettes, chacune décalée de 1 pixel dans X et y, pour un "halo" complet. Vous pouvez configurer ceci en tant que UserControl si vous voulez le faire à plusieurs endroits; définissez le texte du contrôle une fois et le contrôle remplira les 5 étiquettes. Vous pourriez essayer de jouer avec la taille de police ou le poids, mais je doute que vous obteniez quelque chose qui s'alignait correctement et qui avait une bordure parfaite de 1 pixel autour des lettres dans tous les cas. Créez une image de votre texte sur un fond magenta, faites-la sonner en blanc et enregistrez-la sous forme de bitmap avec le magenta incrusté comme couleur transparente. Ensuite, utilisez l'image dans l'étiquette (ou un PictureBox).

+1

+1 pour être le premier –

2

Définissez la propriété BorderStyle du contrôle de l'étiquette à FixedSingle

2
+0

Je connais la propriété BorderStyle et ce n'est pas ce que je veux, je veux que la bordure soit exactement autour du texte afin que vous puissiez voir le texte au-dessus d'autres choses. – Cokegod

1

qu'en est-il de la propriété borderstyle? définissez-le sur FixedSingle dans les fenêtres de propriétés.

7

Si quelqu'un cherche encore, voici ce que je ne (surtout copié à partir du site this)

Créer une nouvelle classe, CustomLabel.cs par exemple. Voici un exemple:

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); 
      } 
    } 

Vous pouvez alors l'utiliser comme ceci:

  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);