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

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

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

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

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

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

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

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

12
389 / 304 / 67
Регистрация: 10.07.2010
Сообщений: 802
26.09.2011, 01:05 2
эта катит
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
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
26.09.2011, 01:17 3
Во первых нужен не 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 4
так только панелька не будет видна, а компоненты которые на ней останутся видимыми, на сколько я могу судить.
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
26.09.2011, 01:24 5
Цитата Сообщение от zelen Посмотреть сообщение
так только панелька не будет видна, а компоненты которые на ней останутся видимыми, на сколько я могу судить.
Что-то не подумал. Видимо всё же твой вариант больше подходит.
0
Level 2
401 / 275 / 48
Регистрация: 22.11.2010
Сообщений: 785
Записей в блоге: 1
26.09.2011, 01:24 6
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
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
26.09.2011, 01:24 7
Только у тебя почему-то тоже MouseMove он же вызывается много раз.
0
Эксперт .NET
17791 / 12942 / 3381
Регистрация: 17.09.2011
Сообщений: 21,220
26.09.2011, 01:26 8
Не покатит, если размер панели изменяется с размером окна.
Или обновлять размеры прямоугольника с изменением размера формы.
Ну и просчет пересечения точки с плоскостью прямоугольника при каждом движении мыши - тоже не очень айс.

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

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

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

Кстати каждый дополнительный Rectangle можно присвоить свойству панели Tag и подписаться на изменения размеров панели, короче вариантов решения одной задачи масса .
0
389 / 304 / 67
Регистрация: 10.07.2010
Сообщений: 802
26.09.2011, 01:31 10
парни, задача изначально странная и рассчитана на то, что бы пользовательский интерфейс удивлял при каждом новом использовании открывая все новые функциональные возможности программы)
0
Level 2
401 / 275 / 48
Регистрация: 22.11.2010
Сообщений: 785
Записей в блоге: 1
26.09.2011, 01:32 11
А типа при наведении может навестись не на панель, а на какой-то элемент внутри панели и не сработает включение видимости? Из-за этого? Что-то не совсем уловил причину надобности MouseMove.
Хотя бы из-за того что из MouseEnter получить координаты курсора нельзя
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
26.09.2011, 02:03 12
Цитата Сообщение от 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  [ТС] 13
Спасибо Всем
 Комментарий модератора 
Одна тема - один вопрос (Правила п.3.15)

 Комментарий модератора 
Если какой-либо пост на форуме показался вам полезным, нажмите кнопку "Спасибо" внизу самого поста.(Правила п.4.5)
0
26.09.2011, 03:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.09.2011, 03:23
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru