Страница: 1 |
Страница: 1 |
Вопрос: Создание многострочного текстового поля на Си Шарп
Добавлено: 15.03.06 20:26
Автор вопроса: Wowan
Нужно текстовое:рисуем квадратик и пишем текст внутри использовал DrawString и каретку из user32.dll довольно муторно может есть другие подходы к этой проблеме? Прошу ответить любого прочитавшего.
Ответы
Всего ответов: 8
Номер ответа: 1
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #1
Добавлено: 16.03.06 04:39
Хм... сначала прочитал ник как "Woman"...
Для начала хотелось бы услышать от автора список причин, по которым не подходит TextBox.
Номер ответа: 2
Автор ответа:
Wowan
Вопросов: 8
Ответов: 13
Профиль | | #2
Добавлено: 16.03.06 08:18
я делаю что-то типа редактора блок схем с графикой я разобрался, а вот с вводом текста в фигуры пока ещё нет.
НЕ знаю как лучше подойти к решению этого вопроса
Номер ответа: 3
Автор ответа:
Wowan
Вопросов: 8
Ответов: 13
Профиль | | #3
Добавлено: 16.03.06 08:18
я делаю что-то типа редактора блок схем с графикой я разобрался, а вот с вводом текста в фигуры пока ещё нет.
НЕ знаю как лучше подойти к решению этого вопроса
Номер ответа: 4
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #4
Добавлено: 16.03.06 14:07
По клику создавай текстбокс, а по нажатию Энтера в нем удаляй его (или перемещай) и создавай на том месте лабел.
Номер ответа: 5
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #5
Добавлено: 16.03.06 22:50
Если это блок-схемы,то мне кажется проще и красивее было бы сделать свой контрол. Отрисовать нужную границу (ромбик,квадрат,эллипс.. и т.д.. ) и отлавливать нажатые клавиши и загонять в твою фигуру в виде текста. Если фигура прямоуголник,то можно обойтись стандартным DrawString, усли же нет, то тут придется через Region работать..
Номер ответа: 6
Автор ответа:
Wowan
Вопросов: 8
Ответов: 13
Профиль | | #6
Добавлено: 17.03.06 08:50
в вопросе "MeasureString и DrawString(..rect)" ты мне
задаёшь вопрос почему я не использую стандартнвый контрол
,а здесь приглаешь наоьорот не использовать его?
Что же мне делать? Кстати так как ты мне предложил я уже сделал но это несколько глючит, я создал класс Caret
используя User32.dll. С текстом проблем почти нет но вот
Например :string text="nnnnnn n"......
 rawString(...rect(40,100));
Выдаст: nnnnnn
n
Хотя я думал что
должно быть так:nnnnnn
n
Или всё нормально, подскажите please.
Номер ответа: 7
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #7
Добавлено: 17.03.06 22:39
Слушай, а зачем ты вообще заморочился с отрисовкой текста через GDI? Зачем так все усложнять? Как мне кажется,тут вообще можно упростить все.. и сделать это следующим образом:
1.Создаешь свой UserControl
-кладешь на него TextBox,Label (Visible=False,Border=None,Multiline=True,Font,WordWrap=по вкусу и т.д)
-устанавливаешь бит стиля ControlStyles.Selectable(чтобы контрол имел возможность получать фокус)
2. Через GDI отрисовываешь нужный тебе Border (прямоугольник,ромб,эллипс и т.д... т.е. нужную тебе фигуру
-Используя Drawing2D.DashStyle.Dot можешь даже отрисовать стндартную рамку при получении фокуса (ну так.. для крутизны! ) )
3.Пользуешься советом Sharp'a, а именно:
-при получении фокуса показываешь юзеру имеющийся у тебя TextBox, но показываешь его таким образом,чтобы он был вписан в твою фигуру,т.е. ручками задаешь положение и размеры относительно размеров и границ твоей фигуры (чтобы выглядело эстетично)
-При потере фокуса прячешь TextBox и показываешь Label с тем же текстом,размерами и положением..
Вот, собственно, и все.. Минимум усилий, и красивый результат..
Номер ответа: 8
Автор ответа:
Wowan
Вопросов: 8
Ответов: 13
Профиль | | #8
Добавлено: 17.03.06 23:26
Спасибо вам конечно большое что вы с нами возитесь без вас не знаю что бы и намудрил. А так всё получилось довольно таки красиво и функционально. За 2 вечера сделал то что нужно.