Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
27 / 27 / 3
Регистрация: 31.05.2011
Сообщений: 199

Аналог звездочек рейтинга (голосования)

21.12.2011, 15:54. Показов 3223. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
На форме есть 5 меток label. [1] [2] [3] [4] [5]. При наведении на 3 метку изображение в ней меняется, а также меняется в 1 и 2 метках. При наведении мышки на 4 метку - изображения меняются у 1, 2, 3 и 4 меток. Ну и так далее по аналогии. (пример: как ставить рейтинг в интернетах (обычно это звездочки...))
Пример сайта, не в рекламных целях: http://se-flamemo.ru/load/se_x8_x10_fajly/26/
Можно увидеть звездочки под каждой темой....
Хотя бы идею подайте, а то в голову ерунда с if'ами лезет....
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.12.2011, 15:54
Ответы с готовыми решениями:

Отобразить результаты голосования сразу после голосования
Почему после нажатия кнопки, отображается результат голосования по нулям, а при повторном нажатии пустом показивает правельные результаты?...

Полосы голосования
Доброй ночи. Столкнулся с такой проблемой, нету полос результата на голосовании Вот скрин: Подскажите, как мне их вернуть.

Функция голосования
Здравствуйте. Пытаюсь улучшить код, избавиться от большого количества функции Resize(), можно ли с помощью регулярных выражений или с...

8
185 / 185 / 53
Регистрация: 10.04.2009
Сообщений: 491
21.12.2011, 16:43
extender
0
27 / 27 / 3
Регистрация: 31.05.2011
Сообщений: 199
21.12.2011, 16:50  [ТС]
andrii, да, именно это. А как на C# реализовать?
0
185 / 185 / 53
Регистрация: 10.04.2009
Сообщений: 491
21.12.2011, 17:02
Fraxinus, это готовое расширение, скачиваете и добавляете себе в проект и пользуетесь
добавляется оно на c# а работает средствами javascript
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
21.12.2011, 17:16
Цитата Сообщение от andrii Посмотреть сообщение
Fraxinus, это готовое расширение, скачиваете и добавляете себе в проект и пользуетесь
добавляется оно на c# а работает средствами javascript
То есть можно в Windows Forms проект добавить?
0
185 / 185 / 53
Регистрация: 10.04.2009
Сообщений: 491
21.12.2011, 18:37
Цитата Сообщение от Casper-SC Посмотреть сообщение
То есть можно в Windows Forms проект добавить?
добавить можно, есть ли смысл?
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
21.12.2011, 18:52
Я уже сам написал свой вариант в виде UserControl для Windows Forms. Сейчас выложу. Стало очень интересно попробовать, ибо для форм впервые пишу контрол.
1
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
21.12.2011, 19:04
StarsRating.cs
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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
    public partial class StarsRating : UserControl
    {
        protected bool aboveStar;
        protected Rating _currentRating;
        protected Rating _selectedRating; //рэйтинг при наведении мышью
        protected Rectangle[] _rects;
        protected Image[] _images;
 
        public StarsRating()
        {
            InitializeComponent();
 
            _images = new Image[4]
            {
                Properties.Resources.StarWhite,
                Properties.Resources.StarGray,
                Properties.Resources.StarGold,
                Properties.Resources.StarBlue
            };
 
            _rects = new Rectangle[5];
            int widthAndHeight = 19;
            int x = 0;
            int y = 0;
            for (int i = 0; i < _rects.Length; i++)
            {
                _rects[i] = new Rectangle(x, y, widthAndHeight, widthAndHeight);
                x += widthAndHeight;
            }
        }
 
        /// <summary>Текущий рейтинг</summary>
        public Rating CurrentRating
        {
            get { return _currentRating; }
            set
            {
                StarsRating.Rating prevRating = _currentRating;
                _currentRating = value;
                OnRatingChange(prevRating, value);
            }
        }
 
        /// <summary>Происходит при изменении рейтинга</summary>
        public event EventHandler<RatingEventArgs> RatingChanged;
 
        protected void OnRatingChange(StarsRating.Rating prevRating, StarsRating.Rating newRating)
        {
            if (RatingChanged != null)
                RatingChanged(this, new RatingEventArgs(prevRating, newRating));
        }
 
        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            if (!aboveStar)
                for (int i = 0; i < _rects.Length; i++)
                    e.Graphics.DrawImage(GetImageForDrawing(i), _rects[i]);
            else
                for (int i = 0; i < _rects.Length; i++)
                    e.Graphics.DrawImage(GetImageForDrawingSelectedStar(i), _rects[i]);
        }
 
        protected override void OnMouseMove(MouseEventArgs e)
        {
            base.OnMouseMove(e);
            for (int i = 0; i < _rects.Length; i++)
            {
                if (e.Location.X >= _rects[i].X && e.Location.Y >= _rects[i].Y &&
                    e.Location.X <= _rects[i].X + _rects[i].Width &&
                    e.Location.Y <= _rects[i].Y + _rects[i].Height)
                {
                    switch (i)
                    {
                        case 0: SelectedRatingChange(Rating.OneStar); break;
                        case 1: SelectedRatingChange(Rating.TwoStars); break;
                        case 2: SelectedRatingChange(Rating.ThreeStars); break;
                        case 3: SelectedRatingChange(Rating.FourStars); break;
                        case 4: SelectedRatingChange(Rating.FiveStars); break;
                        default: throw new NotImplementedException();
                    }
                    aboveStar = true;
                    Cursor = Cursors.Hand;
                    break;
                }
                aboveStar = false;
            }
        }
 
        protected override void OnMouseClick(MouseEventArgs e)
        {
            base.OnMouseClick(e);
            if (aboveStar)
            {
                CurrentRating = _selectedRating;
            }
        }
 
        protected void SelectedRatingChange(StarsRating.Rating newRating)
        {
            if (newRating != _selectedRating)
                Invalidate();
            _selectedRating = newRating;
        }
 
        protected override void OnMouseLeave(EventArgs e)
        {
            base.OnMouseLeave(e);
            aboveStar = false;
            _selectedRating = Rating.None; //чтобы при следующем наведении курсора на ту звёздку, на которую был наведён курсор в прошлый раз снова отрисовывались синие звёзды (это точно нужно)
            Invalidate();
        }
 
        protected Image GetImageForDrawingSelectedStar(int rectNumber)
        {
            switch (_selectedRating)
            {
                case Rating.OneStar: return rectNumber < 1 ? _images[3] : _images[0];
                case Rating.TwoStars: return rectNumber < 2 ? _images[3] : _images[0];
                case Rating.ThreeStars: return rectNumber < 3 ? _images[3] : _images[0];
                case Rating.FourStars: return rectNumber < 4 ? _images[3] : _images[0];
                case Rating.FiveStars: return _images[3];
                default: throw new NotImplementedException();
            }
        }
 
        protected Image GetImageForDrawing(int rectNumber)
        {
            switch (_currentRating)
            {
                case Rating.OneStar: return rectNumber < 1 ? _images[2] : _images[0];
                case Rating.TwoStars: return rectNumber < 2 ? _images[2] : _images[0];
                case Rating.ThreeStars: return rectNumber < 3 ? _images[2] : _images[0];
                case Rating.FourStars: return rectNumber < 4 ? _images[2] : _images[0];
                case Rating.FiveStars: return _images[2];
                default: throw new NotImplementedException();
            }
        }
 
        public enum Rating
        {
            None,
            OneStar,
            TwoStars,
            ThreeStars,
            FourStars,
            FiveStars
        }
    }
 
    public class RatingEventArgs : EventArgs
    {
        StarsRating.Rating _newRating;
        StarsRating.Rating _previousRating;
 
        public RatingEventArgs(StarsRating.Rating previousRating, StarsRating.Rating newRating)
        {
            _newRating = newRating;
            _previousRating = previousRating;
        }
        /// <summary>Новое значение рейтинга</summary>
        public StarsRating.Rating NewRating { get { return _newRating; } }
        /// <summary>Предыдущее значение рейтинга</summary>
        public StarsRating.Rating PreviousRating { get { return _previousRating; } }
    }
Использование:
Form1.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            starsRating1.RatingChanged += new EventHandler<RatingEventArgs>(starsRating1_RatingChanged);
        }
 
        void starsRating1_RatingChanged(object sender, RatingEventArgs e)
        {
            Text = string.Format("Предыдущий рейтинг: {0}; Новый рейтинг: {1}", e.PreviousRating, e.NewRating);
        }
    }
Вложения
Тип файла: zip WinForms_RatingWithStars.zip (39.8 Кб, 60 просмотров)
1
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
21.12.2011, 19:06
Конечно можно допилить, чтобы выравнивание было при растягивании контрола и т.д. Звёздочки тоже не из ресурсов брать, а самому рисовать и т.д. Да и ещё чего-нибудь добавить. Но у меня нету времени столько.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.12.2011, 19:06
Помогаю со студенческими работами здесь

Компонент голосования
Подскажите как установить компонент голосования в joomla 1.7.

Cистема голосования
Приветствую разработчиков на PHP. у меня есть такой вопрос, как сделать такую систему голосования, чтобы выод результатов ьыл графическим,...

Учет голосования
Пишу голосование. Связка php +MySQL возникла проблема, можно несколько раз голосовать за одного и того же участника Регистр. нету, по...

Скрипт голосования
Написать программу, которая выводит на экран список компаний и спрашивает пользователя, за какую компанию он хочет проголосовать. Ответы...

Система голосования
И так, у меня возник очередной вопрос относительно системы голосования. Голоса у меня записываются в базу. Я хочу сделать защиту от...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru