Динамично добавьте объекты к Контекстному меню и установите действие Щелчка

обновление: простой пример, запрашиваемый для:

ff 0 = 1
ff 1 = 1
ff n = go (ff (n-1))
  where
  go x = x + x

При вызове по имени каждый вызов go оценивает ff (n-1) дважды, каждый для каждого появления x в его определение (потому что + является строгим в обоих аргументах, т.е. требует значений обоих).

При вызове по требованию аргумент go оценивается не более одного раза. В частности, здесь значение x обнаруживается только один раз и повторно используется для второго появления x в выражении x + x. Если бы в этом не было необходимости, x не был бы оценен вообще, так же как и вызов по имени.

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


Вот мое понимание этого в контексте Хаскелла.

Согласно Википедии , «вызов по необходимости - это запомненный вариант вызова по имени, где, если аргумент функции оценивается, это значение сохраняется для последующего использования». [ 1122]

Вызов по имени:

take 10 . filter even $ [1..]

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

Вызов по необходимости:

import qualified Data.List.Ordered as O

h = 1 : map (2*) h <> map (3*) h <> map (5*) h
    where
    (<>) = O.union

Разница в том, что здесь список h повторно используется несколькими потребителями в разных темпах, поэтому важно, чтобы полученные значения запоминались. В языке вызовов по имени здесь было бы много копий вычислительных усилий, потому что вычислительное выражение для h будет подставляться при каждом его появлении, вызывая отдельные вычисления для каждого. В языке «по требованию» - , способном , таком как Haskell, результаты вычисления элементов h распределяются между каждой ссылкой на h.

Другим примером является то, что большинство любых данных, определенных в fix, возможны только по требованию. С вызовом по значению мы можем получить комбинатор Y .

См .: Совместное использование и неразделение комбинатора с фиксированной точкой и связанных с ним записей и комментариев (среди них это и его ссылки, например, Можно ли использовать сложение для создания бесконечных списков? ).

11
задан Matías 22 October 2008 в 11:37
поделиться

1 ответ

Так, можно очистить объекты от контекстного меню с:

myContextMenuStrip.Items.Clear();

Можно добавить объект путем вызова:

myContextMenuStrip.Items.Add(myString);

Контекстное меню имеет событие ItemClicked. Ваш обработчик мог быть похожим так:

private void myContextMenuStrip_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
    DoSomething(e.ClickedItem.Text);
}

Кажется, работает хорошо на меня. Сообщите мне, неправильно понял ли я Ваш вопрос.

21
ответ дан 3 December 2019 в 05:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: