Вы можете использовать управление третьей стороны для этого (может быть), но вот несколько причин, почему это потенциально плохая идея:
- управление сторонним стоит денег
- управления сторонних производителей имеют тенденцию к всасыванию
- сторонние элементы управления требуют, чтобы вы распространяли как минимум дополнительную DLL, по которой вы обычно не имеете контроля
- , даже если сторонний элемент управления может в конечном итоге сделать то, что вам нужно, вам потребуется некоторое время и попытаться выяснить, как его использовать, и как забить i т в форму вы требуете
Для чего-либо из обычного (как то, что вы делаете), писать свой собственный UserControl лучший путь, для них (среди других) причины:
- Написание собственного UserControl - это самое интересное, что вы можете сделать в .Net
- вам нужно будет кое-чему научиться, но полученные знания сразу же переносятся на другие проблемы и проекты (тогда как независимо от того, что вы узнаете об использовании Infinite Wonderfulness Gridifier от Initrode, вы только сможете помочь вам с использованием этого конкретного элемента управления)
- не будет ничего дополнительно распространять с приложением
- полного контроля над исходным кодом
- бесплатно навсегда (с извинениями Evony)
- неба это предел - с каким-либо контролем третьей стороной, вы в конечном итоге столкнется с чем-то, чего он просто не может сделать, но если вы делаете это самостоятельно, вы можете буквально сделать все, что хотите.
Ваша конкретная проблема (хорошо описанная в вашем вопросе, благодаря графике) довольно легко сделать, поскольку в основном пользовательский UserControl (с TextBox или двумя брошенными в th e mix). Единственными методами, которые вам понадобятся из объекта System.Drawing.Graphics, являются DrawRectangle, FillRectangle, MeasureString и DrawString. Вам даже не понадобится документация, поскольку Intellisense предоставит вам все, что вам нужно.
Если у вас возникнут проблемы, я напишу вам его для печенья с шоколадным чипсом. :)
Обновление: так как вам нужно, чтобы текст был доступен для выбора, это делает этот подход более сложным. Реализация собственной функциональности типа Textbox - это гигантская боль в петарде, но относительно простое решение - добавить реальный многострочный текстовый блок поверх любого текстового прямоугольника, когда пользователь нажимает на него, и поместить текст прямоугольника (предварительно выбранный) в текстовое поле. Когда это временное текстовое поле теряет фокус (LostFocus), вы рисуете отредактированный текст в прямоугольник и удаляете текстовое поле. Таким образом, у вас есть только одно текстовое поле в вашем UserControl.
Эта версия обойдется вам в два куки.
Обновление 2: Вот simple application, который демонстрирует, как использовать один текстовый блок, чтобы весь ваш элемент управления можно было выбирать и редактировать. И вот source code.
Где мои куки? :) – MusiGenesis
Спасибо за помощь. Ваше решение было именно тем, что я искал. – Mav3rick