Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Как сделать прозрачный фон Label'ов в С#


Автор: Aderando 4.3.2010, 13:08
Всем привет! Говорю сразу я новичок! Естественно много вопросов!
Вот несколько из них:

1. В Windows Form я решил сменить фон программы. Сменил! После добавил label но столкнулся с проблемой. Фон лейблов плохо смотрится на фоне формы! А я хочу что б у меня на фоне формы были только буквы без фона. Надеюсь понятно изложил вопрос. smile 

2. Следующий вопрос скорее всего по Юникоду! 
Вот у меня есть строчка:
 label1.Text = summ.ToString("C");
она мне дает вывод буквы ".р" на примет...   цена сандвича: 25,34 .р     а мне нужно сделать  цена сандвича: 25,34 .грн !
Подскажите пожалуйста как это сделать! И есть ли где-то перечень этих знаков, на будущие!

3. Вопрос по конструктору. Как мне в конструкторе сделать сетку для того что бы ровно расставлять элементы. Я в задачнику видел скриншоты формы, то там у него по всей пощаде точки. Так как мне тоже это сделать?

Буду очень благодарен если мне дадут четкий ответ без всяких приколов и ссылок типа поищи в гугле или мы уже такое обсуждали!  smile  

Автор: CYBERDREAM 4.3.2010, 13:26
1. Установи у Label фон идентичный фону родительского контрола. У меня он автоматом выставляется, не знаю почему тебя так вышло.
2. 
Код

NumberFormatInfo d = new NumberFormatInfo()
                                     {
                                         CurrencySymbol = "грн"
                                     };
            label1.Text = k.ToString("C",d);

3. Увы забыл где это устанавливается. Ты в какой студии работаешь? С 2005 версии очень удобно и так выравнивания производить

Добавлено через 6 минут и 34 секунды
3. Tools-Options-Windows Forms Designer-> LayoutMode=SnapToGrid

Добавлено через 6 минут и 56 секунд
и перезапусти студию

Автор: Aderando 5.3.2010, 11:39
CYBERDREAM огромное спасибо за помощь! 
По поводу лейблов! Я сменил фон формы на рисунок, тоесть фон лейбла не подберу! Поэтому мне нужно сделать именно прозрачный фон а не такой как на форме! Я работаю в Microsoft Visual 2008.

С точками разобрался... спасибо... очень удобная вещь.

А вот с ".грн" не понял, так еще мало в чем розбераюсь! Если не трудно, я кинул код с задачника, простейшая программа, укажи пожалуйста где нужно прописать эту строчку с ".грн" а я попытаюсь понять! Буду очень благодарен!

Код

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication15
{
    public partial class Form1 : Form
    {
        private double summ;

        public Form1()
        {
            InitializeComponent();

        }

        private void Form1_Load(object sender, EventArgs e)
        {
            checkBox3.Enabled = false;
        }

        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox1.Checked) summ += 54.00;
            else summ -= 54.00;

            label1.Refresh();
        }

        private void checkBox2_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox2.Checked)
            {
                summ += 24.50;
                if (!checkBox3.Enabled) checkBox3.Enabled = true;
            }
            else
            {
                summ -= 24.50;
                if (checkBox3.Checked) checkBox3.Checked = false;
                checkBox3.Enabled = false;
            }
            label1.Refresh();
        }

        private void checkBox3_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox3.Checked) summ += 10.50;
            else summ -= 10.50;
            label1.Refresh();
        }

        private void checkBox4_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox4.Checked) summ += 18.00;
            else summ -= 18.00;
            label1.Refresh();
        }

        private void label1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
        {
            label1.Text = summ.ToString("C");
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (checkBox1.Checked && checkBox2.Checked &&
                checkBox3.Checked && checkBox4.Checked)
            {
                MessageBox.Show("Вам предоставляеться скидка 10%\n" +
                    "Стоимоть заказа: " + (summ * 0.9).ToString("C")+
                    "Кафе");

            }
            else
            {
                if (checkBox1.Checked || checkBox2.Checked ||
                    checkBox3.Checked || checkBox4.Checked)
                    MessageBox.Show("Стоимость заказа: " +
                        summ.ToString("C"), "Кафе");
                else
                    MessageBox.Show("Вы нечего не заказали!" +
                        "кафе");

            }
        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

        
    }
}



Автор: CYBERDREAM 5.3.2010, 11:52
подписывать на onpaint не стоит, можно сделать так

Код

#region

using System;
using System.Globalization;
using System.Windows.Forms;

#endregion

namespace del
{
    public partial class example : Form
    {
        private double _summ;

        private readonly NumberFormatInfo _numberFormatInfo = new NumberFormatInfo
                                                                  {
                                                                      CurrencySymbol = ".грн"
                                                                  };

        private Double Summ
        {
            get { return _summ; }
            set
            {
                _summ = value;
                label1.Text = String.Format("{0}грн.", _summ);
            }
        }

        public example()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            checkBox3.Enabled = false;
        }

        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox1.Checked) Summ += 54.00;
            else Summ -= 54.00;
        }

        private void checkBox2_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox2.Checked)
            {
                Summ += 24.50;
                if (!checkBox3.Enabled) checkBox3.Enabled = true;
            }
            else
            {
                Summ -= 24.50;
                if (checkBox3.Checked) checkBox3.Checked = false;
                checkBox3.Enabled = false;
            }
            label1.Refresh();
        }

        private void checkBox3_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox3.Checked) _summ += 10.50;
            else Summ -= 10.50;
            label1.Refresh();
        }

        private void checkBox4_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox4.Checked) Summ += 18.00;
            else Summ -= 18.00;
        }


        private void button1_Click(object sender, EventArgs e)
        {
            if (checkBox1.Checked && checkBox2.Checked &&
                checkBox3.Checked && checkBox4.Checked)
            {
                MessageBox.Show("Вам предоставляеться скидка 10%\n" +
                                "Стоимоть заказа: " + (Summ*0.9).ToString("C", _numberFormatInfo) +
                                "Кафе");
            }
            else
            {
                if (checkBox1.Checked || checkBox2.Checked ||
                    checkBox3.Checked || checkBox4.Checked)
                    MessageBox.Show("Стоимость заказа: " +
                                    Summ.ToString("C", _numberFormatInfo), "Кафе");
                else
                    MessageBox.Show("Вы нечего не заказали!" +
                                    "кафе");
            }
        }

        private void label1_Click(object sender, EventArgs e)
        {
        }
    }
}

Автор: Aderando 5.3.2010, 12:02
Спасибо, пока еще не разобрался но сейчас попытаюсь понять smile !

Автор: CYBERDREAM 5.3.2010, 12:58
По поводу прозрачности вроде стандартными средствами нельзя. Так что можно сделать свой контрол
Код

#region

using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Windows.Forms;

#endregion

namespace randz.CustomControls
{
    /// <summary>
    ///   A custom windows control to display text vertically
    /// </summary>
    [ToolboxBitmap(typeof (VerticalLabel), "VerticalLabel.ico")]
    public class VerticalLabel : Control
    {
        private string _labelText;

        private readonly Container _components = new Container();

        /// <summary>
        ///   VerticalLabel constructor
        /// </summary>
        public VerticalLabel()
        {
            CreateControl();
            InitializeComponent();
            SetStyle(ControlStyles.Opaque, true);
        }

        /// <summary>
        ///   Dispose override method
        /// </summary>
        /// <param name = "disposing">boolean parameter</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                if (_components != null)
                {
                    _components.Dispose();
                }
            }
            base.Dispose(disposing);
        }

        [DebuggerStepThrough]
        private void InitializeComponent()
        {
            Size = new Size(24, 100);
        }

        /// <summary>
        ///   OnPaint override. This is where the text is rendered vertically.
        /// </summary>
        /// <param name = "e">PaintEventArgs</param>
        protected override void OnPaint(PaintEventArgs e)
        {
            e.Graphics.DrawString(_labelText, Font, new SolidBrush(ForeColor), 0, 0);
        }

        protected override CreateParams CreateParams
        {
            get
            {
                CreateParams cp = base.CreateParams;
                cp.ExStyle |= 0x20; // Turn on WS_EX_TRANSPARENT
                return cp;
            }
        }

        /// <summary>
        ///   The text to be displayed in the control
        /// </summary>
        [Category("VerticalLabel"), Description("Text is displayed vertically in container.")]
        public override string Text
        {
            get { return _labelText; }
            set
            {
                _labelText = value;
                Invalidate();
            }
        }
    }
}

Взято с http://www.codeproject.com/KB/miscctrl/Vertical_Label_Control.aspx

Автор: Aderando 5.3.2010, 16:29
О-о-о-о-о-о!!!! Это хорошо звучит! Но объясни пожалуйста для чайника как этот код преобразовать  в контрол! Если можно по  smile шагово, очень прошу!

Автор: CYBERDREAM 5.3.2010, 17:13
Добавь класс в проект (NameSpace поменяй на свой). Собери свой солушин. Затем в тулбоксе увидишь будет создан новый компонент Label7. Ну и как обычный контрол кидай на форму

Добавлено @ 17:22
вот здесь ivashkanet описал) http://forum.vingrad.ru/index.php?showtopic=132205&view=findpost&p=998960

Автор: Aderando 9.3.2010, 18:53
Создал клас, переименовал, написал код...а дальше что? Как его скомпилировать что б использовать??

Автор: CYBERDREAM 9.3.2010, 19:24
там ведь все написано. 
Собери проект. В тулбоксе после этого появится твой контрол, пользуйся

Автор: Aderando 9.3.2010, 19:35
Там написано собери проект....КАК ЕГО СОБРАТЬ? Мож сказать?

CYBERDREAM, тебе нужно будет:
1) В меню (наверху) выбрать Project --> AddClass.
2) Откроется диалог, дашь етому классу имя SingleCheckedListBox
3) Откроется страница с кодом. Код:Код

    class SingleCheckedListBox
    {
    }


Полностью заменишь на мой (1:1, кроме коментариев)
4) Скомпилируешь проект
5) В дизайнере форм на вкладке Toolbox появится подвкладка "<Твой проект> components" появится новый контрол, его можно ложить на форму

Я не понял 4-й пункт! Как его скомпилировать??

Автор: CYBERDREAM 9.3.2010, 19:49
Build - > build solution

Автор: Aderando 9.3.2010, 19:51
У меня русская версия

Нашел, нажал..ща попробую...ток оно шото не добавилось в туулбокс!


У тебя есть ася? 

Автор: CYBERDREAM 9.3.2010, 20:03
прости, занят. Потрудись, найдешь

Автор: Aderando 9.3.2010, 20:35
когда будешь свободен то помоги...и аську дай...на всяк_

Автор: CYBERDREAM 9.3.2010, 21:29
Инструкция так сказать

Автор: Aderando 10.3.2010, 19:15
Кто-то стукал в мою асю..я по ошибке игнорировал. Прошу повторить запрос, буду весьма благодарен!

Автор: Aderando 10.3.2010, 19:45
Огромное спасибо! Все получилось!

Но, но есть сцука НО smile))

Когда готовую программу разворачиваешь то лейбл пропадает... сворачиваешь обратно лейбл не появляеться...   а если прогу сворачиваешь и розворачиваешь обратно то лейбл появляеться.. smile) smile  

мож и в этом поможешь???


И еще  вопрос...  как этот клас сохранить в программе...ато после закрытия  Microsoft Visual 2008
клас пропадает. Не удобно всегда егопрописывать.
или есть вариант изменить существующий клас что б тот не сохранять.

Автор: CYBERDREAM 10.3.2010, 20:10
У лэйбла есть какие то баги в дизайнере, на кодпрожекте есть вроде комменты как поправить.
А то что пропадает, это странно, точно сохраняешь проект? smile 

Автор: Aderando 10.3.2010, 20:19
Я делал все как на рисунке...хоть и у меня русская версия...

Создал клас, вставил код, нажал на построение и на перестроить решение, после чего у меня появился твой лейбл. Всталяю в форму...все работает...нажимаю F5 и все гууд, но при резвертывании пропадает а когда сворачиваешь и разворачиваешь прогу то оно появляеться. Это конешно не столь проблематично на моем уровне программирования, можно просто выключить кнопку разворачивания. Но В будущем...то могут возникнуть проблемы. И я не понял как этот класс сохранить в программу чтоб после закрытия проги я не делал все с нуля. Возможно ты знаешь как изменить код существующего класа. Я себе вставлю туда твой код и все.

Автор: CYBERDREAM 10.3.2010, 20:33
вот проект, что то ты не то делаешь

Автор: Aderando 10.3.2010, 20:37
Начну с начала! Я только начал обучение! Я понимаю трудно обьяснить человеку который мало в этом что соображает!

Что мне делать с этим проектом??? smile 

Автор: CYBERDREAM 10.3.2010, 20:47
Открываешь delwin.cproj и собираешь приложение

Добавлено через 49 секунд
ты в аське ответишь или нет?)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)