RichTextBox и контекстное меню

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

Это как? Чем не подходит свойство?

как в блокноте

а что в него ставить-то, чтобы стандартное меню было?

ContextMenuStrip )

Вот я и спрашиваю.
Это получается, что надо заново изобретать стандартное меню?

А, да, стандартного почему-то нет в RichTextBox.

В TextBox с Multiline есть.

чем отличается от RichTextBox?

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

То есть, в самом ленивом языке мира, где укорачивают и так уже укороченное, предлагается городить такую эпопею? :dizzy_face:

        private void menuCopyPaste_Opening(object sender, System.ComponentModel.CancelEventArgs e)
        {
            if (richTextBoxWebPage.TextLength > 0)
            {
                cutTextToolStripMenuItem.Enabled = true;
                copyTextToolStripMenuItem.Enabled = true;
                selectAllTextToolStripMenuItem.Enabled = true;
            }
            else
            {
                cutTextToolStripMenuItem.Enabled = false;
                copyTextToolStripMenuItem.Enabled = false;
                selectAllTextToolStripMenuItem.Enabled = false;
            }
        }

        private void cutTextToolStripMenuItem_Click(object sender, EventArgs e)
        {
            string t = richTextBoxWebPage.SelectedText;
            if (!string.IsNullOrEmpty(t))
            {
                richTextBoxWebPage.Cut();
            }
        }

        private void copyTextToolStripMenuItem_Click(object sender, EventArgs e)
        {
            richTextBoxWebPage.Copy();
        }

        private void pasteTextToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (Clipboard.ContainsText())
                richTextBoxWebPage.Paste();
        }

        private void selectAllTextToolStripMenuItem_Click(object sender, EventArgs e)
        {
            richTextBoxWebPage.SelectAll();
        }

А как узнать, выделен ли весь текст или нет?

Причем тут язык, это библиотека.
И эта проблема вообще из WinAPI winapi richedit default context menu - Google zoeken
В винформс (в отличии от WPF и прочего современного) большинство контролов это обертки над винапи.

А зачем знать, что именно весь?
Но если надо, то наверно сравнить длину выделенного с длиной всего.

Ну так библиотека же по правилам языка писалась, где не принято писать лишнюю строчку кода. Это язык, в котором всё максимально упрощено (даже там, где не надо) и над всем есть обёртки. Почему бы тогда, до кучи, стандартное меню не докрутить? :thinking: Я не понимаю эту логику :man_shrugging:

12 лет назад создавал RichEdit на WinAPI. Не помню, чтобы там отсутствовало меню :thinking: Зато помню, что со шрифтом были какие-то проблемы.

а как узнать, надо включить или отключить пункт “select all”?

Во многих меню это не делают )


Ну правильно. Потому что обёртки не дают для этого нормальный интерфейс, вот и не делают.
А зачем держать активными пункты “копировать” и “вырезать”, если ничего не выделено?

Да так много где, браузеры и т.п., винапи там не причем )

Я про WinAPI и не говорил. На WinAPI, вроде, тоже нет таких функций. Но WinForms легко мог бы их предоставить. На то он и обёртка. Тем более, от Microsoft. Они-то должны уметь работать с WinAPI.

Нет. Это вы от нехватки знаний такое городите. Можно обойтись одним обработчиком на все пункты.

А вообще странный у вас подход к разработке. Все время начинать с каких то наездов. В этом мире ничего не крутится только ради вашего блага. Берите обычный тексбокс и будет вам меню.
Многие вещи приходит переписывать под себя, никто же не знает что вам может понадобится через 20 лет.

ДА и в чем проблема мне лично вообще не понятно. по гуглу первая же строчка показывает готовый метод расширения.

Ну с таким уровнем лени лезть в программирование … странно даже.

Вообще сам ричбокс был сделан лет 200 назад и сюда пришел очень обрезанный и кустарный компонент тупо ради того чтобы он там был.

Подождите :thinking: У вас какая-то странная навязчивая идея принимать все наезды лично на свой счёт, как буд-то это вы все эти обёртки и API разработали и не можете вынести критику, хотя лично вам никто ничего не предъявляет. Как будто всё крутится только вокруг вас.

Ну так а в чем проблема сразу сказать, что так можно, если вы это знали? :thinking: Наверное, переизбыток знаний тоже может негативно сказываться на способности ими делиться :man_shrugging:

Ну блин, за 20-то лет такую простую вещь как СТАНДАРТНОЕ меню уже давно можно было легко завернуть во встроенный функционал, до кучи к горе всего остального :man_facepalming: Никто из разработчиков и представить не мог, что кому-то, внезапно, может понадобиться СТАНДАРТНОЕ меню? :scream:
Или вы пользуетесь логикой по типу “если мне это не надо, то и никому не надо и просто не должно быть надо”, как в линуксе?

Ну и зачем вообще? :man_shrugging: И что мешало сделать аналог? Может лень? :thinking:

В чём это проявляется?

Чтоб RTF и прочий форматированный текст выводить )

Пользы куча, отсутствие меню — мелочь.

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

Да это вопрос о лени. За все время никогда не парился переписать логику менюшки. Там на 10 строк кода. А вот вашу тему почитал и решил погуглить. А там вагон и маленькая телега всяких компонентов на любой вкус. Что вам мешало гуглить перед распросами?
Ну вот я погуглил и скинул вам рабочий класс расширения. Пользуйтесь.

Это называется профдеформаця. Если сравнивать время когда информация и знания добывались курением оригинальных мануалов и пересказыванием чужих наработок и нынешнее время когда любая информация доступна по одному лишь клику мыши … нежелание некоторых пользоваться общедоступными информационными ресурсами немного выводит … все просят разжевать и в рот положить.

Так полно уже оберток. Гугл миллиард решений предлагает. Одно из них скинул выше.

На то время это был единственный рабочий вариант. Затем появились новые технологии и переделывать старые контролы стало нерационально. Ну или как то так.

Во внутренних свойствах. Почти нереально переопределить логику работы контрола в производных классах. Костыли возникают почти регулярно при малейшем изменении стандартной логики обработки.
Сейчас есть рабочие контролы для отображения форматированного текста. И может поэтому никто и не парится над расширением стандартного компонента. Все ползуют более навороченные элементы которые свободны и лишены недостатков.

Ну с этим согласен :man_shrugging:

Ну тогда не удивлятесь, что некоторые не хотят/не умеют искать нужную информацию :man_shrugging:

Но ведь у Борланда это как-то получилось (TMemo называется) и до сих пор работает. Почему сами создатели WinAPI такой простой мелочи сделать не смогли?

У меня психоблок на использование сторонних компонентов. Особенно такой элементарной хрени, как поле для ввода текста. Ради этого тянуть сторонний компонент? :dizzy_face:
А что если разработчик просто забьёт на обновление и т.д. ?