powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Подскажите компонент
21 сообщений из 21, страница 1 из 1
Подскажите компонент
    #38785031
Настенька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброго дня!!! Нужно сделать примерно вот такую иерархию:
Была кнопочка, при нажатии на нее открывается первый уровень, а затем второй. И можно было бы галочками выбирать нужные элементы как из первого, так и из второго уровня. Пока на ум пришло только menustrip, но там куча проблем: при щелчке на втором уровне меню закрывается, а мне надо сделать так, чтобы при выборе любого пункта ничего не закрывалось. Примерно вот скриншот того, что должно получиться. Заранее спасибо за ответы.
...
Рейтинг: 0 / 0
Подскажите компонент
    #38785048
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Настенька,

MenuStrip/ContextMenuStrip ?
...
Рейтинг: 0 / 0
Подскажите компонент
    #38785119
Настенька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда подскажите, как сделать так, чтобы при щелчке на подменю (если уже последний уровень и нет подменю, оно не закрывалось? Оно галочку ставит и закрывает меню, приходится заново открывать. Я не нашла как это сделать.
...
Рейтинг: 0 / 0
Подскажите компонент
    #38785171
Настенька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помогите пож-та, ответьте на последний вопрос.
...
Рейтинг: 0 / 0
Подскажите компонент
    #38785974
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изи,
так пойдет? :)

Добавляем на форму кнопку button1 и цепляем к ней наше меню
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
        private void Form1_Load(object sender, EventArgs e)
        {
            button1.ContextMenuStrip = new MyMenuStip()
            {
                Items =
                {
                    new ToolStripMenuItem { Text = "Element 1", CheckOnClick = true },
                    new ToolStripMenuItem { Text = "Element 2", CheckOnClick = true },
                    new ToolStripMenuItem { Text = "Element 3", CheckOnClick = true },
                    new ToolStripMenuItem { Text = "Element 4", CheckOnClick = true },
                    new ToolStripMenuItem { Text = "Element 5", CheckOnClick = true },
                    new ToolStripMenuItem { Text = "Element 6", CheckOnClick = true },
                }
            };
        }


а вот сам класс меню, в нём переопределяем метод OnItemClicked, и комментируем вызов базового метода в котором и происходит закрытие меню. Результат на лицо :)
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
    class MyMenuStip : ContextMenuStrip
    {
        protected override void OnItemClicked(ToolStripItemClickedEventArgs e)
        {
            //Больше не закрывается
            //base.OnItemClicked(e);
        }
    }



Удачи Настенька :)
...
Рейтинг: 0 / 0
Подскажите компонент
    #38786254
Настенька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes, это гениально, помогло, огромное вам спасибо. Очень выручили. :-))) Низкий вам поклон.
...
Рейтинг: 0 / 0
Подскажите компонент
    #38786257
Настенька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извините, рано обрадовалась, вот сделала такой код, на форме button1, далее в коде:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Private Class MyMenuStip
        Inherits ContextMenuStrip
        Protected Overrides Sub OnItemClicked(ByVal e As ToolStripItemClickedEventArgs)
            'Больше не закрывается
            'base.OnItemClicked(e)
        End Sub
    End Class

   
    Private Sub Form1_Load1(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        Dim PopupMenu As New ContextMenuStrip()
        Dim itm As New ToolStripMenuItem
        itm = New ToolStripMenuItem("тест")
        itm.CheckOnClick = True
        PopupMenu.Items.Add(itm)
        Dim ur2 As New ToolStripMenuItem("дальше продвижение")
        itm.DropDownItems.Add(ur2)
        ur2.CheckOnClick = True
        Button1.ContextMenuStrip = PopupMenu
    End Sub



Теперь он первый уровень и вправду не закрывает (можно галочки ставить), а когда щелкаешь на втором уровне - опять закрывает. Не нашла события именно клику по вложенным уровням. Помогите пож-та еще раз.
...
Рейтинг: 0 / 0
Подскажите компонент
    #38786388
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Связано это с тем, что элемент меню вызывал стандартное DropDown меню, которое ведет себя обычным образом.
вот небольшая модификация:
В дополнение к переопределенному классу ContextMenuStrip добавляем еще класс для наших элементов внутри меню:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
    class MyMenuStipItem : ToolStripMenuItem
    {
        protected override ToolStripDropDown CreateDefaultDropDown()
        {
            return new MyMenuStip();
        }
    }

    class MyMenuStip : ContextMenuStrip
    {
        protected override void OnItemClicked(ToolStripItemClickedEventArgs e)
        {
            //Больше не закрывается
            //base.OnItemClicked(e);
        }
    }


в окне особо без изменений, добавил иерархию + поменяли класс элементов меню на созданный выше:
Код: 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.
        private void Form1_Load(object sender, EventArgs e)
        {
            button1.ContextMenuStrip = new MyMenuStip()
            {
                Items =
                {
                    new MyMenuStipItem
                    {
                        Text = "Element 1", CheckOnClick = true,
                        DropDownItems = 
                        {
                            new MyMenuStipItem
                            {
                                Text = "SubElement 11", CheckOnClick = true,
                                DropDownItems = 
                                {
                                    new MyMenuStipItem { Text = "SubElement 111", CheckOnClick = true },
                                    new MyMenuStipItem { Text = "SubElement 112", CheckOnClick = true },
                                    new MyMenuStipItem { Text = "SubElement 113", CheckOnClick = true },
                                    new MyMenuStipItem { Text = "SubElement 114", CheckOnClick = true },
                                }
                            },
                            new MyMenuStipItem
                            {
                                Text = "SubElement 12", CheckOnClick = true,
                                DropDownItems = 
                                {
                                    new MyMenuStipItem { Text = "SubElement 121", CheckOnClick = true },
                                    new MyMenuStipItem { Text = "SubElement 122", CheckOnClick = true },
                                    new MyMenuStipItem { Text = "SubElement 123", CheckOnClick = true },
                                    new MyMenuStipItem { Text = "SubElement 124", CheckOnClick = true },
                                }
                            },
                            new MyMenuStipItem
                            {
                                Text = "SubElement 13", CheckOnClick = true,
                            },
                            new MyMenuStipItem
                            {
                                Text = "SubElement 14", CheckOnClick = true,
                                DropDownItems = 
                                {
                                    new MyMenuStipItem { Text = "SubElement 141", CheckOnClick = true },
                                    new MyMenuStipItem { Text = "SubElement 142", CheckOnClick = true },
                                    new MyMenuStipItem { Text = "SubElement 143", CheckOnClick = true },
                                    new MyMenuStipItem { Text = "SubElement 144", CheckOnClick = true },
                                }
                            },
                        }

                    },
                    new MyMenuStipItem
                    {
                        Text = "Element 2", CheckOnClick = true,
                        DropDownItems = 
                        {
                            new MyMenuStipItem { Text = "SubElement 21", CheckOnClick = true },
                            new MyMenuStipItem { Text = "SubElement 22", CheckOnClick = true },
                            new MyMenuStipItem { Text = "SubElement 23", CheckOnClick = true },
                            new MyMenuStipItem { Text = "SubElement 24", CheckOnClick = true },
                        }
                    },

                    new MyMenuStipItem { Text = "Element 3", CheckOnClick = true },
                    new MyMenuStipItem { Text = "Element 4", CheckOnClick = true },
                    new MyMenuStipItem { Text = "Element 5", CheckOnClick = true },
                    new MyMenuStipItem { Text = "Element 6", CheckOnClick = true },
                }
            };
        }
...
Рейтинг: 0 / 0
Подскажите компонент
    #38786419
Настенька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes, большое вам спасибо, но мне нужен код на vb.net, конвертер некорректно переводит. :(
...
Рейтинг: 0 / 0
Подскажите компонент
    #38786445
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Настенька,
для формы:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim myMenuStip = New MyMenuStip()
        For i = 1 To 5
            Dim element = New MyMenuStipItem()
            element.Text = String.Format("Element {0}", i)
            element.CheckOnClick = True
            For j = 1 To 5
                Dim element2 = New MyMenuStipItem
                element2.Text = String.Format("Element {0}{1}", i, j)
                element2.CheckOnClick = True
                element.DropDownItems.Add(element2)

            Next
            myMenuStip.Items.Add(element)
        Next
        Button1.ContextMenuStrip = myMenuStip
    End Sub



классы:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Class MyMenuStipItem
    Inherits ToolStripMenuItem
    Protected Overrides Function CreateDefaultDropDown() As ToolStripDropDown
        Return New MyMenuStip()
    End Function
End Class

Class MyMenuStip
    Inherits ContextMenuStrip
    Protected Overrides Sub OnItemClicked(e As ToolStripItemClickedEventArgs)
        'Больше не закрывается
        'MyBase.OnItemClicked(e)
    End Sub
End Class
...
Рейтинг: 0 / 0
Подскажите компонент
    #38786468
Настенька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы гений, это почти то, что надо, за исключением того, что это надо сделать не на контекстное меню, а на обычное, т.е. на MenuStrip. Пытаюсь исправить вот эту строку (зеленое на красное):

Class MyMenuStip
Inherits ContextMenuStrip на Inherits MenuStrip
Protected Overrides Sub OnItemClicked(ByVal e As ToolStripItemClickedEventArgs)
'Больше не закрывается
'MyBase.OnItemClicked(e)
End Sub
End Class

И дальше вот здесь начинает ругаться (красным цветом):

Protected Overrides Function CreateDefaultDropDown() As ToolStripDropDown
Return New MyMenuStip()
End Function

Еще пож-та помогите.
...
Рейтинг: 0 / 0
Подскажите компонент
    #38786474
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Настенька,

на обычное меню в верху экрана или что? я не понимаю, чего в хотите, опишите более детально, где и как должно появляться это меню, на каком элементе и так далее.
...
Рейтинг: 0 / 0
Подскажите компонент
    #38786483
Настенька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, на обычное меню вверху экрана, только оно у меня будет в центре формы, я поставлю свойство Dock=None. Нужно это все проделать именно с компонентом MenuStrip.
...
Рейтинг: 0 / 0
Подскажите компонент
    #38786496
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Настенька,

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim menu = New MenuStrip()
        'Dim myMenuStip = New MyMenuStip()
        For i = 1 To 5
            Dim element = New MyMenuStipItem()
            element.Text = String.Format("Element {0}", i)
            element.CheckOnClick = True
            For j = 1 To 5
                Dim element2 = New MyMenuStipItem
                element2.Text = String.Format("Element {0}{1}", i, j)
                element2.CheckOnClick = True
                element.DropDownItems.Add(element2)
                For z = 1 To 5
                    Dim element3 = New MyMenuStipItem()
                    element3.Text = String.Format("Element {0}{1}{2}", i, j, z)
                    element3.CheckOnClick = True
                    element2.DropDownItems.Add(element3)
                Next
            Next
            menu.Items.Add(element)
        Next
        Controls.Add(Menu)
    End Sub
...
Рейтинг: 0 / 0
Подскажите компонент
    #38786504
Настенька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господи, вы гений, это то, что надо. Спасибо огромное, что помогли, день прошел не впустую. Хорошо, что есть еще люди, способные помочь тем, кто просит. Еще раз спасибо. Улыбок вам побольше и хорошего рабочего дня!!!
...
Рейтинг: 0 / 0
Подскажите компонент
    #38786550
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes,

Красивые девушки в Норильске, да?
...
Рейтинг: 0 / 0
Подскажите компонент
    #38786584
Настенька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень, светлые волосы, большие голубые глаза - настоящая натуральная нордическая красота, которой в Москве уже почти не осталось. :)
...
Рейтинг: 0 / 0
Подскажите компонент
    #38786603
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НастенькаОчень, светлые волосы, большие голубые глаза - настоящая натуральная нордическая красота, которой в Москве уже почти не осталось. :)

Да, да, верю. Тут посмотрел список тем, вспомнил змейку, куда то убежавшую с экрана. Так и не доделали программу?
...
Рейтинг: 0 / 0
Подскажите компонент
    #38786607
Настенька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да доделала вроде, правда, давно уже в нее не играла. Появится время - выложу еще сюда - потестите. :)
...
Рейтинг: 0 / 0
Подскажите компонент
    #38786614
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79,

Вы о чём? я из Перми, о тех. характеристиках "Настеньки" я не в курсе
...
Рейтинг: 0 / 0
Подскажите компонент
    #38786618
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesArm79,
Вы о чём? я из Перми, о тех. характеристиках "Настеньки" я не в курсе
Да я как бы тоже :) В профиле фотка есть :-)
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Подскажите компонент
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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