Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/42: Рейтинг темы: голосов - 42, средняя оценка - 4.71
 Аватар для Ногин Антон
64 / 12 / 3
Регистрация: 04.10.2009
Сообщений: 519

Главное меню

31.01.2011, 00:07. Показов 8525. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Хочу сделать главное меню.. например, установить на форму контрол mainmenu, расположить его в самом верху и сделать его невидимым.. И чтобы при наведении на него мышью, он появлялся..
И вот.. у многих контролов есть событие mouse_enter и mouse_leave... и можно легко это организовать, тогда как в мейн меню такого нет..
Посоветуйте пожалуйста что-нибудь..
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.01.2011, 00:07
Ответы с готовыми решениями:

Главное меню
6.25. Дана последовательность ненулевых целых чисел, оканчивающая ну¬лем. Определить: А) сколько раз в этой последовательности меняется...

Калькулятор: перейти с клавиши Ok на главное меню
помогите перейти с клавиши Ok она же button1 на главное меню у меня 2 form1 и form2 вот они form1 using System; using...

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

13
XpressMusicMan Музыка24/7
 Аватар для QwertyX
46 / 35 / 3
Регистрация: 27.08.2010
Сообщений: 346
31.01.2011, 00:19
mainMenu то есть menuStrip?
Если да, то такое событие для него есть...
1
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
31.01.2011, 19:21
Ногин Антон, для плавного "выезда " нужно использовать таймер
2
 Аватар для Ногин Антон
64 / 12 / 3
Регистрация: 04.10.2009
Сообщений: 519
31.01.2011, 22:19  [ТС]
QwertyX, точно) это всё привычки из дельфи))

nio, а как его по таймеру сделать?

У меня пока что даже "неплавно" не получается

Изначально поставил его невидимым, а когда навожу курсор, то он не появляется..

Потом поставил его видимым, навожу курсор - нормально, потом убираю - исчезает. Опять навожу, а он собака не показывается
0
XpressMusicMan Музыка24/7
 Аватар для QwertyX
46 / 35 / 3
Регистрация: 27.08.2010
Сообщений: 346
01.02.2011, 00:41
Блин, на старом комре были проектики... Щя поищу...

Добавлено через 2 минуты
Нет... Сейчас не найду... Но на скорою руку могу попробовать сделать нужный эффект... Закончу- выложу код... Если надо то залью проект с коментами

Добавлено через 1 час 58 минут
Все шло паралельно просмотру фильма, по этому немного задержался...
Скажу сразу:
Я НЕ ЗНАЮ СИШАРП НА ВЫСОКОМ УРОВНЕ
НО!
Я достаточно хорошо владею базой и имею хорошую фантазию, поэтому часто могу найти выход из той или иной ситуации...

Так что, предупреждаю, зрелище не для слабонервных!
Сунул код с каментами по ходу мысли:
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
//Первым делом кидаем на форму 4 контрола: Меню, Панель, 2 таймера...
//С менюшкой есть свой прикол, в свойствах надо отменить "Dock", то есть в свойствах выбрать "Dock = none"... А я еще залил в нее базовые данные(жмешь на стрелочку с права от конрола и выбираешь ссылку "Вставить стандартные элементы")...
// То же есть свои свойства и у таймеров: оба включи- "Enabled = true" и ставь интервал(в милисек) на 100... timer1 для просчета анимации спуска меню, timer2 для просчета анимации поднятия меню...
//Панель нужна для того чтобы ловить когда мышка зашла на территорию где обычно сидит менюшка...
        private void Form1_Load(object sender, EventArgs e)
        {
//Вырубаем оба таймера
            timer1.Stop();
            timer2.Stop();
//Задаем место где будет сидеть меню и панель... Панеле так же задаем тот же размер... Это все и конструкторе можно сделать, но мне удобней и точней в коде... Высота -24, потому что меню высотой в 24 пкс, и ей надо съезжать вниз
            menuStrip1.Location = new Point(0,-24);
            panel1.Location = new Point(0, 0);
            panel1.Size = menuStrip1.Size;
        }
        int i = -24;//Создал переменную в которой хранится высота положения меню, для удобства на ней -24, то есть начальное значение
        private void timer1_Tick(object sender, EventArgs e)
        {
//При каждом тике, проверяем не дошел ли i до 0...
            if (i < 1)
            {
                menuStrip1.Location = new Point(0, i);//размещаем меню соответственно тику 
                i++;//Положение i вырастает на 1
            }
            else
            {
                timer1.Stop();//Как только i дошел до 0, останавливаем таймер(чтобы не вылезло за границы)
                i = -24;//Обнуляем положение для следующего раза...
            }
        }
 
        int calcPosY;//Переменная для расчета положения мышки
        private void panel1_MouseEnter(object sender, EventArgs e)
        {
            calcPosY = Cursor.Position.Y - this.Location.Y - 32;//Cursor.Position.Y(ось У мышки относительно экрана, НЕ ФОРМЫ), this.Location.Y(ось У формы относительно экрана), 32(размер рамки окна)
            if (calcPosY < 25)//Этот запрос сделан, потому что когда выводишь мышь с мешюшки и попадаешь на панель, не запускалась опять анимация спуска...
            {
                    timer1.Start();
            }
 
        }
        int j = 0;//Создал переменную в которой хранится высота положения меню
        private void timer2_Tick(object sender, EventArgs e)
        {
//При каждом тике, проверяем не дошел ли j до -24...
            if (j > -25)
            {
                menuStrip1.Location = new Point(0, j);//размещаем меню соответственно тику
                j--;//Положение j снижается на 1
            }
            else
            {
                timer2.Stop();//Как только j дошел до -24, останавливаем таймер(чтобы не вылезло за границы)
                j = 0;//Обнуляем положение для следующего раза...
            }
        }
//Далее считаем что будет если курсор вывести из панели\меню, надеюсь разберешься :)
        private void panel1_MouseLeave(object sender, EventArgs e)
        {
            calcPosY = Cursor.Position.Y - this.Location.Y - 32;
            if (calcPosY >= 24)
            {
                timer2.Start();
            }
        }
 
        private void menuStrip1_MouseLeave(object sender, EventArgs e)
        {
            calcPosY = Cursor.Position.Y - this.Location.Y - 31;
            if (calcPosY >= 24)
            {
                timer2.Start();
            }
        }
Извини, каменты у меня ужасные но... Вдруг да поможет
Я сейчас спать, если нужен проект - завтра залью

П.С.
Чтобы меню забегала обратно, когда жмешь на пункт в подменю, просто после кода строки в подменю, вставь "timer2.Start();", это запустит анимацию свертывания
1
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
01.02.2011, 09:26
Цитата Сообщение от Ногин Антон Посмотреть сообщение
поставил его невидимым, а когда навожу курсор, то он не появляется
конечно, как ты можешь поставить курсор на то что не видимо.
пример для панели на 2-х таймерах
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
private void panel1_MouseEnter(object sender, EventArgs e)
        {
            timer1.Enabled = true;
            timer2.Enabled = false;
        }
 
        private void panel1_MouseLeave(object sender, EventArgs e)
        {
            timer2.Enabled = true;
            timer1.Enabled = false;
        }
 
        private void timer1_Tick(object sender, EventArgs e)
        {            
                if (panel1.Top > -1) timer1.Enabled = false;
                else panel1.Top++;                        
        }
 
        private void timer2_Tick(object sender, EventArgs e)
        {            
                if (panel1.Top < -24) timer2.Enabled = false;
                else panel1.Top--;            
        }
Панель (или в данном случае меню) должна выступать на несколько пикселей. Интервал таймера 20 или меньше.
1
 Аватар для Ногин Антон
64 / 12 / 3
Регистрация: 04.10.2009
Сообщений: 519
01.02.2011, 12:18  [ТС]
Большое спасибо, ребята! Сейчас буду пробовать и разбираться!
0
XpressMusicMan Музыка24/7
 Аватар для QwertyX
46 / 35 / 3
Регистрация: 27.08.2010
Сообщений: 346
01.02.2011, 18:33
Со вчерашнего подправил последний отрывок:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        private void panel1_MouseLeave(object sender, EventArgs e)
        {
            calcPosY = Cursor.Position.Y - this.Location.Y - 31;
            if (calcPosY >= 23)
            {
                timer2.Start();
            }
        }
 
        private void menuStrip1_MouseLeave(object sender, EventArgs e)
        {
            calcPosY = Cursor.Position.Y - this.Location.Y - 31;
            if (calcPosY >= 23)
            {
                timer2.Start();
            }
        }
Так 100% не будет глючить когда курсор на границе меню или панели...

Добавлено через 1 час 2 минуты
Цитата Сообщение от nio Посмотреть сообщение
конечно, как ты можешь поставить курсор на то что не видимо.
пример для панели на 2-х таймерах
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
private void panel1_MouseEnter(object sender, EventArgs e)
        {
            timer1.Enabled = true;
            timer2.Enabled = false;
        }
 
        private void panel1_MouseLeave(object sender, EventArgs e)
        {
            timer2.Enabled = true;
            timer1.Enabled = false;
        }
 
        private void timer1_Tick(object sender, EventArgs e)
        {            
                if (panel1.Top > -1) timer1.Enabled = false;
                else panel1.Top++;                        
        }
 
        private void timer2_Tick(object sender, EventArgs e)
        {            
                if (panel1.Top < -24) timer2.Enabled = false;
                else panel1.Top--;            
        }
Панель (или в данном случае меню) должна выступать на несколько пикселей. Интервал таймера 20 или меньше.
Да, но дело в том что когда мышь заходит на меню, запускается код panel1_MouseLeave... И меню убегает от мышки
Так что код помоему не рабочий... Хотя я на вскидку прикинул...
1
 Аватар для Ногин Антон
64 / 12 / 3
Регистрация: 04.10.2009
Сообщений: 519
01.02.2011, 19:36  [ТС]
Супер! Большое спасибо, ребята!

Сделал на двух формах - всё исправно работает. Начал писать на третьей - работает, но остаётся след от панели.

Как его можно убрать?
Изображения
 
0
XpressMusicMan Музыка24/7
 Аватар для QwertyX
46 / 35 / 3
Регистрация: 27.08.2010
Сообщений: 346
01.02.2011, 19:55
Скорее всего свойством "Opacity" правда я не помню если он есть у панели...
Сейчас проверим...
0
 Аватар для Ногин Антон
64 / 12 / 3
Регистрация: 04.10.2009
Сообщений: 519
01.02.2011, 19:58  [ТС]
Я не нашёл..))
0
XpressMusicMan Музыка24/7
 Аватар для QwertyX
46 / 35 / 3
Регистрация: 27.08.2010
Сообщений: 346
01.02.2011, 20:10
Досадно... Прозрачности нет...
А ".Hide()" не работает как и ".Visible"...
Хм... Мне в голову приходит 2 геморных решения
Первое, ручное, одноразовое:
Среж этот угол картинки и сунь его как фон картинку в панель...

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

Добавлено через 8 минут
Я НАМУДРИЛ!
C#
1
panel1.BackColor = Color.Transparent;
Иногда лучше знать базу чем фантазию
Хотя я сразу об этом не подумал потому что на некоторых конролах этот способ меня подводил
0
 Аватар для Ногин Антон
64 / 12 / 3
Регистрация: 04.10.2009
Сообщений: 519
01.02.2011, 20:43  [ТС]
Ещё раз большое спасибо!

Теперь буду знать и про

C#
1
panel1.BackColor = Color.Transparent;
0
XpressMusicMan Музыка24/7
 Аватар для QwertyX
46 / 35 / 3
Регистрация: 27.08.2010
Сообщений: 346
01.02.2011, 20:50
Это можно еще задать через панель свойств в конструкторе
Там правда надо перейти на закладку "Web"...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.02.2011, 20:50
Помогаю со студенческими работами здесь

Возврат назад в главное меню из подпункта меню
Добрый вечер, подскажите пожалуйста, как организовать многоуровневое меню? А конкретно, надо из подменю вернуться в предыдущее меню. Я...

Главное меню
Всем привет! имеется некоторое горизонтальное меню (скрин прилагается), хотелось бы с ним сделать следующие чудеса: - все меню должно...

Главное меню
Подскажите пожалуйста, как исправить проблему. Есть главное меню, пункт «А» и «Б». В пункте «Б» есть подпункты «1», «2»…и так далее,...

Главное меню
Вот с меню ни как не могу разобраться..жумловское меню встает не по центру контейнера меню...как задать стиль меню?меню должно быть...

главное меню
как сделать чтобы в главном меню, когда я нажимаю &quot;начать программу&quot; на форме появлялись все то, что я сделал, а до етого не было видно...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru