powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Визуальный сигнал (типа лампочка)
15 сообщений из 15, страница 1 из 1
Визуальный сигнал (типа лампочка)
    #38789690
dimasikus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, возникла такая необходимость сделать свой контрол, который представлял на форме как-бы лампочку, т.е допустим при нажатии на кнопку лампочка загоралась зелёным и т.п. Как мне показалось лучше для этого использовать иконки кружков, и просто менять их местами. Создал контрол и хочу узнать ваше мнение и советы по этому поводу, просто мне кажется что-то можно сделать по другому и намного проще. Да и ещё я бы хотел сделать свойство для изменения размера 32х32 и 16х16, сейчас у меня два котрола для 16х16 и 32х32 хотелось бы в один запихнуть.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using IconLibrary;

namespace LargeLampControl
{
    /// <summary>
    /// Большая лампочка для индикации
    /// </summary>
    [Description("Большая лампочка для индикации (размер: 32х32; фоновый цвет: белый)")]
    public partial class LargeLampControl : UserControl
    {
        /// <summary>
        /// Значение отвечает за иконку
        /// 0 - зелёная иконка
        /// 1 - серая иконка
        /// 2 - оранжевая иконка
        /// 3 - красная иконка
        /// 4 - желтая иконка
        /// </summary>
        private byte statusLamp = 1;

        /// <summary>
        /// Цвет лампочки(иконки)
        /// </summary>
        public enum colorLamp : byte
        {
            /// <summary>
            /// Зелёный цвет
            /// </summary>
            Green = 0,
            /// <summary>
            /// Серый цвет
            /// </summary>
            Grey = 1,
            /// <summary>
            /// Оранжевый цвет
            /// </summary>
            Orange = 2,
            /// <summary>
            /// Красный цвет
            /// </summary>
            Red = 3,
            /// <summary>
            /// Жёлтый цвет
            /// </summary>
            Yellow = 4
        }

        /// <summary>
        /// Массив указателей на большие иконки 32х32
        /// Элементы(5):
        /// 0 - зелёная иконка
        /// 1 - серая иконка
        /// 2 - оранжевая иконка
        /// 3 - красная иконка
        /// 4 - желтая иконка
        /// </summary>
        private IntPtr[] hlIconL = new IntPtr[5];

        /// <summary>
        /// Процедура загрузки иконок из dll
        /// </summary>
        /// <param name="stExeFileName">Имя dll</param>
        /// <param name="nIconIndex">Начальный индекс иконки</param>
        /// <param name="phiconLarge">Массив больших иконок(32х32)</param>
        /// <param name="phiconSmall">Массив маленьких иконок(16х16)</param>
        /// <param name="nIcons">Колличество загружаемых иконок</param>
        /// <returns>Число загруженных иконок</returns>
        [DllImport("shell32.dll")]
        static extern int ExtractIconEx(string stExeFileName, int nIconIndex, IntPtr[] phiconLarge, IntPtr[] phiconSmall, int nIcons);

        /// <summary>
        /// Свойства иконоки (считывание / установка)
        /// </summary>
        [Browsable(false)]
        public colorLamp IconLamp
        {
            get { return (colorLamp)statusLamp; }
            set { statusLamp = (byte)value; }
        }

        /// <summary>
        /// Метод отрисовки контрола
        /// </summary>
        /// <param name="e">Ссылка на контрол(себя)</param>
        protected override void OnPaint(PaintEventArgs e)
        {
            //Вызываем базовый OnPaint
            base.OnPaint(e);

            //отрисовка иконки(лампочки)
            // 0 - зелёная иконка
            // 1 - серая иконка
            // 2 - оранжевая иконка
            // 3 - красная иконка
            // 4 - желтая иконка
            switch (this.statusLamp)
            {
                case 0: e.Graphics.DrawIcon(Icon.FromHandle(hlIconL[0]), 0, 0); break;
                case 1: e.Graphics.DrawIcon(Icon.FromHandle(hlIconL[1]), 0, 0); break;
                case 2: e.Graphics.DrawIcon(Icon.FromHandle(hlIconL[2]), 0, 0); break;
                case 3: e.Graphics.DrawIcon(Icon.FromHandle(hlIconL[3]), 0, 0); break;
                case 4: e.Graphics.DrawIcon(Icon.FromHandle(hlIconL[4]), 0, 0); break;
            }

            //освобождение используемых ресурсов
            e.Graphics.Dispose();
        }

        public LargeLampControl()
        {
            InitializeComponent();

            //загрузка 5-х больших(32х32) иконок
            ExtractIconEx("IconLibrary.dll", 7, hlIconL, null, 5);
        }
    }
}
...
Рейтинг: 0 / 0
Визуальный сигнал (типа лампочка)
    #38789737
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimasikus,

проще честно рисовать кружок - никакой зависимости от размеров не будет
...
Рейтинг: 0 / 0
Визуальный сигнал (типа лампочка)
    #38789839
dimasikus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да я об этом думал, и пробовал ока цвета подбирать долго то сильно ярка то тускло. Нашёл в нете один пример, тока в нем я многое понять не могу, а лампочки там красивые тока 16х16 а ещё нужно 32х32.
...
Рейтинг: 0 / 0
Визуальный сигнал (типа лампочка)
    #38789845
dimasikus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ещё вопрос есть можно ли в своём контроле скрыть все свойства кроме своих, я в книжке читал что перед свойством пишешь
Код: c#
1.
[Browsable(false)]

и оно скрывается. типо если хочешь скрыть то надо у каждого так писать? получается нет другово способа?
...
Рейтинг: 0 / 0
Визуальный сигнал (типа лампочка)
    #38789862
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimasikus,
можно просто рисовать
http://www.codeproject.com/Articles/20018/Gradients-made-easy
...
Рейтинг: 0 / 0
Визуальный сигнал (типа лампочка)
    #38789881
dimasikus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответы
...
Рейтинг: 0 / 0
Визуальный сигнал (типа лампочка)
    #38790103
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в такие моменты вся ущербность WinForms по сравнению с WPF явно видна :)
не совсем понятно, зачем ты достаешь иконки из DLL ки... не проще просто из ресурсов иконки тянуть?
...
Рейтинг: 0 / 0
Визуальный сигнал (типа лампочка)
    #38790115
dimasikus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
просто мне тупо захотелось иконки запихнуть в dll, вот так и сделал
...
Рейтинг: 0 / 0
Визуальный сигнал (типа лампочка)
    #38790118
dimasikus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а WPF можно и для настольных приложений использовать?
...
Рейтинг: 0 / 0
Визуальный сигнал (типа лампочка)
    #38790123
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimasikus,

странный вопрос, а что нельзя?
...
Рейтинг: 0 / 0
Визуальный сигнал (типа лампочка)
    #38790124
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimasikusа WPF можно и для настольных приложений использовать?
он собственно для них и предназначен
...
Рейтинг: 0 / 0
Визуальный сигнал (типа лампочка)
    #38790130
dimasikus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
просто я его никогда не использовал, думал для инет приложений предназначен. когда учил С# в техе WPF токо вводили
...
Рейтинг: 0 / 0
Визуальный сигнал (типа лампочка)
    #38790143
dimasikus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
посоветуйте что можно почитать по созданию WPF?
...
Рейтинг: 0 / 0
Визуальный сигнал (типа лампочка)
    #38790174
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimasikus,
если уровень знания о WPF 0, то советую начать с этого видео, там поверхностно объяснены многие важные вещи
http://www.intuit.ru/studies/courses/550/406/info
...
Рейтинг: 0 / 0
Визуальный сигнал (типа лампочка)
    #38790217
dimasikus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да вы правильно поняли знания WPF-0. Спасибо.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Визуальный сигнал (типа лампочка)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]