Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/22: Рейтинг темы: голосов - 22, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 21.03.2011
Сообщений: 27

Наведение курсора на panel!

26.09.2011, 00:24. Показов 4416. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как сделать так чтоб после наведения на panel где visible = false , visible становилась true?
C#
1
2
3
4
5
private void panel1_MouseMove(object sender, MouseEventArgs e)
        {
            panel1.Visible =true;
            
        }
эта часть кода не катит(
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.09.2011, 00:24
Ответы с готовыми решениями:

panel + pictureBox перемешение с помошью курсора
Как правильно cделать перемещение большой картинки на panel с помощью курсора, картинка не должна вылазить за края. Я про бывал...

Наведение курсора на картинку
Как сделать строку условия покороче, такой код громоздкий получается... Задумка - На форме есть Image и при наведении на определенную...

Наведение курсора на div
Подскажите, реально ли без флеша реализовать следующее: при наведении мышкой на див и клике открывается новая страница?

12
389 / 304 / 67
Регистрация: 10.07.2010
Сообщений: 802
26.09.2011, 01:05
эта катит
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Rectangle rect;
 
private void Form1_Load(object sender, EventArgs e)
{
    rect = new Rectangle(panel1.Left, panel1.Top, panel1.Width, panel1.Height);
}
 
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
    if (rect.Contains(e.X, e.Y))
        panel1.Visible = true;
    else
        panel1.Visible = false;
}
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
26.09.2011, 01:17
Во первых нужен не MouseMove, а MouseEnter.

Как вариант не изменять видимость, а изменять прозрачность цвета можно.

Вот кинь код в пустой WinForms проект (только если ты его полностью закинешь, то у тебя namespace будет не совпадать, надеюсь разберёшься):
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
using System;
using System.Drawing;
using System.Windows.Forms;
 
namespace WinForms_Panel
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
 
            ClientSize = new Size(484, 252);
            StartPosition = FormStartPosition.CenterScreen;
 
            Panel panel = new Panel();
            panel.BackColor = Color.FromArgb(0, 76, 112, 110);
            panel.Location = new Point(6, 19);
            panel.Name = "panel";
            panel.Size = new Size(190, 75);
            panel.TabIndex = 0;
 
            GroupBox groupBox = new GroupBox();
            groupBox.Controls.Add(panel);
            groupBox.Location = new Point(84, 57);
            groupBox.Name = "groupBox";
            groupBox.Size = new Size(202, 100);
            groupBox.TabIndex = 1;
            groupBox.TabStop = false;
            groupBox.Text = "Наведите курсор внутрь";
 
            panel.MouseEnter += new EventHandler(panel_MouseEnter);
            panel.MouseLeave += new EventHandler(panel_MouseLeave);
            panel.Tag = 255; //Сохраняем нужный уровень прозрачности
 
            Controls.Add(groupBox);
        }
 
        void panel_MouseLeave(object sender, EventArgs e)
        {
            Panel panel = (Panel)sender;
            panel.BackColor = Color.FromArgb(0, panel.BackColor);
        }
 
        private void panel_MouseEnter(object sender, EventArgs e)
        {
            Panel panel = (Panel)sender;
            panel.BackColor = Color.FromArgb((int)panel.Tag, panel.BackColor.R, panel.BackColor.G, panel.BackColor.B);
        }
    }
}
0
389 / 304 / 67
Регистрация: 10.07.2010
Сообщений: 802
26.09.2011, 01:22
так только панелька не будет видна, а компоненты которые на ней останутся видимыми, на сколько я могу судить.
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
26.09.2011, 01:24
Цитата Сообщение от zelen Посмотреть сообщение
так только панелька не будет видна, а компоненты которые на ней останутся видимыми, на сколько я могу судить.
Что-то не подумал. Видимо всё же твой вариант больше подходит.
0
Level 2
 Аватар для FakiR
401 / 275 / 48
Регистрация: 22.11.2010
Сообщений: 785
Записей в блоге: 1
26.09.2011, 01:24
Casper-SC, ну это как посмотреть на решение задачи, если сделать так как просит автор темы, то нужен как раз таки MouseMove.

P.S. - Можно чуть оптимизировать:

C#
1
2
3
4
private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            panel1.Visible = panel1.ClientRectangle.Contains(e.Location);
        }
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
26.09.2011, 01:24
Только у тебя почему-то тоже MouseMove он же вызывается много раз.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
26.09.2011, 01:26
Не покатит, если размер панели изменяется с размером окна.
Или обновлять размеры прямоугольника с изменением размера формы.
Ну и просчет пересечения точки с плоскостью прямоугольника при каждом движении мыши - тоже не очень айс.

Я обычно в таких случаях создаю дополнительную панель-контейнер, в нее вкладываю требуемую панель и выставляю свойсто Dock = Fill.
Потом в панель-контейнер добавляется следующий обработчик:

C#
1
2
3
4
private void ContainerPanel_MouseEnter(object sender, EventArgs e)
{
    TargetPanel.Visible = true;
}
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
26.09.2011, 01:28
Цитата Сообщение от FakiR Посмотреть сообщение
Casper-SC, ну это как посмотреть на решение задачи, если сделать так как просит автор темы, то нужен как раз таки MouseMove.
А типа при наведении может навестись не на панель, а на какой-то элемент внутри панели и не сработает включение видимости? Из-за этого? Что-то не совсем уловил причину надобности MouseMove.

Добавлено через 1 минуту
Короче тут всё зависит от задачи, я видимо не совсем понимаю что нужно в итоге, так бы сделал по уму, было бы что делать и тестить на нужную работоспособность.

Кстати каждый дополнительный Rectangle можно присвоить свойству панели Tag и подписаться на изменения размеров панели, короче вариантов решения одной задачи масса .
0
389 / 304 / 67
Регистрация: 10.07.2010
Сообщений: 802
26.09.2011, 01:31
парни, задача изначально странная и рассчитана на то, что бы пользовательский интерфейс удивлял при каждом новом использовании открывая все новые функциональные возможности программы)
0
Level 2
 Аватар для FakiR
401 / 275 / 48
Регистрация: 22.11.2010
Сообщений: 785
Записей в блоге: 1
26.09.2011, 01:32
А типа при наведении может навестись не на панель, а на какой-то элемент внутри панели и не сработает включение видимости? Из-за этого? Что-то не совсем уловил причину надобности MouseMove.
Хотя бы из-за того что из MouseEnter получить координаты курсора нельзя
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
26.09.2011, 02:03
Цитата Сообщение от kolorotur Посмотреть сообщение
Я обычно в таких случаях создаю дополнительную панель-контейнер, в нее вкладываю требуемую панель и выставляю свойсто Dock = Fill.
Потом в панель-контейнер добавляется следующий обработчик:
Можно посмотреть на рабочем примере? Я походу что-то не так делал, но ваш вариант у меня не заработал.

Испробовал разные варианты, вроде как самый нормальный предложил всё-таки zelen, можно его чуть улучшить так думаю:
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
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            panelContainer.SizeChanged += new EventHandler(panelContainer_SizeChanged);
            Rectangle rect = new Rectangle(panelContainer.Location, panelContainer.Size);
            panelContainer.Tag = rect;
        }
 
        void panelContainer_SizeChanged(object sender, EventArgs e)
        {
            Panel panel = (Panel)sender;
            //panel.Tag = new Rectangle(panel.Location, panel.Size);
            Rectangle rect = (Rectangle)panel.Tag;
            rect.Size = panel.Size;
            panel.Tag = rect; //так как упаковка/распаковка, эта строка нужна
        }
 
        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            for (int i = 0; i < Controls.Count; i++)
            {
                if (Controls[i] is Panel)
                {
                    Panel panel = (Panel)Controls[i];
                    Rectangle rect = (Rectangle)panel.Tag;
                    panel.Visible = rect.Contains(e.X, e.Y);
                }
            }
        }
    }
Добавлено через 3 минуты
Для неперегруженного окна думаю частая проверка позиции не навредит сильно. Интересно было бы увидеть более оптимизированные варианты.
0
0 / 0 / 0
Регистрация: 21.03.2011
Сообщений: 27
26.09.2011, 03:23  [ТС]
Спасибо Всем
 Комментарий модератора 
Одна тема - один вопрос (Правила п.3.15)

 Комментарий модератора 
Если какой-либо пост на форуме показался вам полезным, нажмите кнопку "Спасибо" внизу самого поста.(Правила п.4.5)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.09.2011, 03:23
Помогаю со студенческими работами здесь

Наведение курсора на ячейку таблицы!
Всем добра! Помогите пожалуйста кто может! Вот табличка: &lt;table&gt; &lt;tr&gt; &lt;td...

IE наведение курсора, скроллинг страницы
Добрый вечер, нужна помощь, так как сам уже не могу разобраться. Cуть проблемы... Eсть страница с полями Input и заголовками Label,...

Кнопка реагирует на наведение курсора.
Помогите написать событие для кнопки, при котором она реагирует на него при наведении курсора. Спасибо.

Наведение курсора мыши на объект
Здравствуйте ,не могу разобраться ,как сделать,чтобы при наведении мыши на объект (iz1,iz2,iz3) вылезало название(Музей-квартира...

Подсветка элементов при наведение курсора
Добрый день. Подскажите пожалуйста, хочу при наведении мыши(курсора) на текстовые поля в форме подсвечивать их цветом. Не при выделении,...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Номеклатура. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru