Как добавить границы для метки в Windows Forms? - PullRequest
4 голосов
/ 13 декабря 2010

Я пытаюсь создать форму с белой меткой внутри, чтобы при нажатии на что-либо форма исчезала и показывала только метку. До сих пор я пытался поместить TransparencyKey на Lime, и когда я щелкаю по чему-либо, я изменял BackColor на Lime и устанавливал FormBorderStyle на None. Но проблема в том, что я сейчас делаю, в том, что белая метка не имеет границ, поэтому Вы не можете ее увидеть. Я знаю о свойстве BorderStyle, и это не то, что я хочу, я хочу, чтобы граница была точно вокруг текста, чтобы вы могли видеть текст поверх других вещей. Есть ли способ добавить границы для метки?

Вот мой код, кстати:

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

Ответы [ 5 ]

7 голосов
/ 29 апреля 2014

Если кто-то еще ищет, вот что я сделал (в основном, скопировал с этого сайта)

Создайте новый класс, например CustomLabel.cs.Вот пример:

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

Затем вы можете использовать его так:

            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);
3 голосов
/ 13 декабря 2010

Ну конечно;есть свойство BorderStyle для Label, которое может быть установлено в FixedSingle или Fixed3D.FixedSingle - это однопиксельная граница в цвете ForeColor, в то время как Fixed3D - это скошенная 3D-граница, в которой используются оттенки серого фона метки.

РЕДАКТИРОВАТЬ: ОК, немного подробнее, что именно нужно.На мой взгляд, у вас есть пара вариантов.

  1. Поместите две метки, одну поверх другой, с одинаковым содержимым и форматированием, КРОМЕ ТОГО, что сзади - белый, а другой -спереди черный, а метка сзади смещена от метки спереди на один пиксель в измерениях X и / или Y.Вы получите белую "тень" за черным текстом.Вы могли бы даже установить четыре метки, каждая из которых смещена на 1 пиксель как по оси X, так и по оси Y, для полного «ореола».Вы можете установить это как UserControl, если вы хотите сделать это в нескольких местах;установите текст элемента управления один раз, и элемент управления заполнит все 5 меток.Вы можете попробовать поиграть с размером шрифта или весом, но я сомневаюсь, что вы получите что-то, что выровнено правильно и будет иметь идеальную 1-пиксельную рамку вокруг букв во всех случаях.

  2. Создатьизображение текста на пурпурном фоне, обведите его в белый цвет и сохраните как растровое изображение с пурпурным ключом в виде прозрачного цвета.Затем используйте изображение в метке (или в PictureBox).

2 голосов
/ 13 декабря 2010

Установите его Label.BorderStyle Property на один из BorderStyle Enumeration.

2 голосов
/ 13 декабря 2010

Установите для свойства BorderStyle элемента управления меткой значение FixedSingle

1 голос
/ 13 декабря 2010

как насчет свойства borderstyle?установите значение FixedSingle в окнах свойств.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...