Генерация второго контекстного меню динамически в Winforms - PullRequest
2 голосов
/ 17 мая 2010

У меня есть контекстное меню с несколькими вариантами выбора. Если пользователь выбирает конкретный выбор, я хочу, чтобы появился список вариантов во втором меню. Эти варианты будут исходить из хранилища данных и будут уникальными для этого пользователя.

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

Ответы [ 2 ]

2 голосов
/ 17 мая 2010

Одним из способов является создание каскадного меню: в контекстном меню добавьте один элемент, который будет действовать как «родительский» элемент, и добавьте один дочерний элемент меню к родительскому элементу. Затем присоедините обработчик события для события DropDownOpening родительского элемента и добавьте в него что-то вроде этого:

private void ParentMenuItem_DropDownOpening(object sender, EventArgs e)
{
    IEnumerable<string> items = GetItems();
    _parentMenuItem.DropDownItems.Clear();
    foreach (var item in items)
    {
        _parentMenuItem.DropDownItems.Add(item);
    }
}

Это будет заполнять дочернее меню каждый раз, когда оно открывается (добавляйте кеширование по мере необходимости).

Технически, это будет работать без добавления фиктивного дочернего элемента, но при добавлении дочернего элемента в родительском меню будет отображаться стрелка, указывающая на наличие каскадного дочернего меню.

0 голосов
/ 20 ноября 2010

Я бы добавил следующее, чтобы установить обработчики событий для новых элементов:

private void ParentMenuItem_DropDownOpening(object sender, EventArgs e)
{
    IEnumerable<string> items = GetItems();
    _parentMenuItem.DropDownItems.Clear();
    int i=0;
    foreach (var item in items)
    {
        _parentMenuItem.DropDownItems.Add(item);
        _parentMenuItem.DropDownItems[i].click += new EventHandler(menuItem_click);
        i++;
    }
}`enter code here`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...