Как сделать пустое текстовое поле разместить элемент textbox
Обновлено: 08.07.2024
Чтение длинного текстового документа может утомить любого за считанные минуты. Однако есть несколько простых способов сделать ваши документы более привлекательными и привлекательными для читателя. Один из таких вариантов — добавить цветные текстовые поля между абзацами. Это полезный способ показать важные действия в полнотекстовых документах. В этой статье давайте рассмотрим, как создать текстовое поле в документе Word.
Связанный: Как быстро добавить разделители в Word?
Как создать текстовое поле в документах Word?
Мы обсудим следующие варианты на основе Word 2016 или более поздней версии.
- Создать текстовое поле из существующего текста
- Создание пустого текстового поля
- Изменение размера и положения текстового поля
- Изменение направления текста
- Удаление границ
Создание текстового поля из существующего текста
Вы можете преобразовать любой существующий текстовый абзац и список в текстовое поле в Word. Посмотрим, как это сделать.
Создание пустого текстового поля
Конечно, вам не обязательно нужен существующий текст для создания нового текстового поля. Кроме того, вы также можете создать пустые текстовые поля и ввести в них текст позже.
Изменение размера и положения текстового поля
Когда вы создали текстовое поле, у вас есть различные варианты редактирования. Вы можете спроектировать его, изменить размер и разместить в любом месте документа.
Изменение направления текста
В текстовом поле вы также можете влиять на направление текста. Помимо горизонтального выравнивания по умолчанию, текст также может располагаться вертикально.
Связанный: Как встроить таблицу Excel в документ Word?
Удаление границ и содержимого
По умолчанию текстовые поля отображаются с рамками, но сохранять их не обязательно. Бордюры легко убрать.
Использование шаблонов текстовых полей
Шаблоны текстовых полей в Word
Например, вы можете использовать текстовое поле в формате боковой панели или выбрать один из красочных форматов. Вы можете настроить положение макета, чтобы выровнять содержимое рядом с полем.
Предопределенное текстовое поле в Word
Вы также можете настроить текстовое поле и создать собственный шаблон в виде быстрых частей.
Другие параметры форматирования
Я знаю, что это может быть старая ветка, но я подумал, что отвечу на нее на случай, если кто-то еще наткнется на нее.
Затем вызовите следующее (при необходимости измените):
Отличный ответ, Grahamvs! Это то, что я искал. Однако у меня возникают проблемы с попыткой показать подсказку для ДВУХ разных текстовых полей в событии form_load. Какие-нибудь советы?
@ Sev09 Вы можете разместить свой код? Попробуй SendMessage(Me.textbox2.Handle, &H1501, 0, "Your second message here") . Я бы порекомендовал создать новый вопрос и добавить комментарий с @Grahamvs, чтобы я мог его увидеть. Я также рекомендовал бы создать новый класс, унаследованный от текстового поля, и добавить туда код, так как это упростит повторное использование кода.
Проблема, похоже, в том, что это было многострочное текстовое поле. Еще раз спасибо за ваш первоначальный ответ.
Предполагая, что вы имеете в виду Windows Forms, взгляните на этот вопрос .
По сути, вам нужно вызвать функцию WinAPI SendMessage для элемента управления со EM_SETCUEBANNER значением.
Что действительно приятно, так это плавное исчезновение, когда пользователь вводит свой текст в поле. Его чертовски легко реализовать, и он отлично выглядит.
вы можете создать подкласс TextBox и переопределить WndProc
Спасибо! Это было здорово, и я хотел использовать его несколько раз, поэтому я создал свойство в этом классе: Private Hint As String Public WriteOnly Property HintText () As String Set (Value As String) Hint = Value End Set End Property Затем я переопределил жестко закодированный текст выше: g.DrawString (Hint, Me.Font, Brushes.Gray, 1, 1) В вызывающей форме я установил подсказку, используя: Form1.TextBoxPlaceHolder1.HintText = "Enter Desired Name"
Потрясающая работа Ивана и cardmagik. Создайте пользовательский элемент управления и используйте приведенный ниже код.
Попробуйте что-нибудь вроде этого:
Плохая идея. Не обрабатывает щелчки мыши (щелчок правой кнопкой мыши -> контекстное меню -> вырезать не должно быть доступно), Text возвращает этот заполнитель как фактический текст (вы бы хотели, чтобы он возвращался string.Empty ) и т. Д. У этого есть много недостатков.
Спасибо за ответ. Я не собирался предлагать решение, охватывающее все варианты использования, поскольку объяснение того, как именно охватывать каждый пограничный случай, было бы слишком длинным. Мое намерение состояло в том, чтобы просто подтолкнуть Роял в правильном направлении, т.е. идея изменения элемента ForeColor всякий раз, когда текст (потенциально) изменяется.
Спасибо, но есть ли для этого какое-нибудь имущество. Я не хочу писать код для этого bcz, согласно Дэну Абрамову, много проверок, которые мне нужно сделать (если свойства нет, я добавлю метку рядом с текстовым полем).
Если это не большая часть вашего дизайна пользовательского интерфейса, я бы сказал, просто добавьте метку рядом с текстовым полем. Это значительно проще.
Есть 4 поля текстбокс. Нужно создать какой-то метод, чтобы присваивал textbox.Text=0 пустому полю. Если писать всё через if else , то получается целая гора кода. Некрасиво.
1 ответ 1
Можно через обработчик события:
Подпиши его на все боксы.
Похожие
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
дизайн сайта / логотип © 2022 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2022.1.25.41261
Как добиться этого с помощью текстовых полей WPF ??
Вы можете сделать это намного проще с помощью a VisualBrush и некоторых триггеров в Style :
Чтобы повысить возможность повторного использования этого Style , вы также можете создать набор прикрепленных свойств для управления фактическим текстом, цветом, ориентацией баннера cue и т. Д.
@Kurian IsMouseCaptured заставит реплику исчезнуть, только когда вы щелкнете ее мышью, но появится снова, когда вы отпустите кнопку мыши. Это не выглядит хорошо. IsMouseOver тоже не годится (клавиатура имеет фокус, а указатель мыши находится где-то в другом месте => отображается подсказка). Большинство баннеров cue используют IsKeyboardFocused (например, Facebook), и я думаю, что это нормально. Альтернативным решением было бы использовать оба триггера: (IsMouseOver ИЛИ IsKeyboardFocused)
Решение должно быть Hint = "Пожалуйста, введите текст", а не 20 элементов . Увы, это не поддерживается легендарным встроенным текстовым полем .
Хотя этот подход может быть приемлемым для условий по умолчанию, он не работает, если ваше текстовое поле уже содержит фоновую кисть или фон формы не того же цвета, что и текстовое поле.
Это решение работает особенно хорошо, если вы установите для TextBlock значение IsHitTestVisible="False"
как насчет использования materialDesign HintAssist? Я использую это, вы также можете добавить плавающую подсказку:
Я установил Material Design с пакетом Nuget, в ссылке документации есть руководство по установке
Сделайте это в коде программной части, установив изначально серый цвет текста и добавив обработчики событий для получения и потери фокуса клавиатуры.
Затем обработчики событий:
-1 за выполнение этого в коде позади: загромождает элемент управления, и есть высокая вероятность того, что это будет мешать другой логике управления, если не сейчас, то в будущем.
Вы должны создать настраиваемый элемент управления, унаследовав текстовое поле. Ссылка ниже содержит отличный пример образца текстового поля поиска. Пожалуйста, взгляните на это
Вы можете сделать это очень просто. Идея состоит в том, чтобы разместить метку в том же месте, что и текстовое поле. Ваша метка будет видна, если текстовое поле не имеет текста и не в фокусе.
Бонус: если вы хотите иметь значение по умолчанию для вашего текстового поля, обязательно установите его при отправке данных (например: "InputText" = "PlaceHolder Text Here", если пусто).
это также работает с PasswordBox . Если вы хотите использовать его с TextBox просто обмениваться PasswordChanged с TextChanged .
XAML:
CodeBehind:
Однажды я попал в такую же ситуацию, решил ее следующим образом. Я выполнил только требования к окну подсказок, вы можете сделать его более интерактивным, добавив эффекты и другие вещи к другим событиям, таким как фокус и т. Д.
КОД WPF (я удалил стили, чтобы сделать его читабельным)
Другое решение - использовать набор инструментов WPF, например MahApps.Metro. Он имеет множество приятных функций, таких как водяной знак текстового поля:
Я использовал события получения и потери фокуса:
Это решение работает при любых обстоятельствах. Чистый XAML, легко повторно используемый.
Я совершаю это с VisualBrush и некоторые триггеры в Style предложенных: sellmeadog .
Если вы считаете, что ответ @ sellmeadog почти правильный, подумайте о его исправлении, вместо того, чтобы публиковать новый ответ почти без разницы.
Кроме того, если вы хотите использовать подход управления WinForm, у меня есть инфраструктура, которая уже включает эту реализацию под названием BitFlex Framework, которую вы можете бесплатно скачать здесь .
Вот статья о BitFlex, если вам нужна дополнительная информация. Вы начнете обнаруживать, что если вы хотите иметь элементы управления в стиле Windows Explorer, которые обычно никогда не выходят из коробки, и поскольку WPF не работает с дескрипторами, вы не можете написать простую оболочку для Win32 или существующего элемента управления, как вы можете с WinForms.
Скриншот:
вау, это выглядит немного хакерским . Как я могу это сделать при создании пользовательского элемента управления с помощью XAML?
Вы этого не сделаете. Вот как это делается. Если вы хотите инкапсулировать это, создайте пользовательский элемент управления и свойство CueText и вызовите SetCueText в установщике.
Я думаю, OP должен содержать элементы управления winforms, чтобы использовать этот подход. Или есть способ получить дескриптор текстового поля?
Это похоже на то, что можно сделать декларативно с WPF, привязав его к тому, имеет ли текстовое поле фокус или нет, и т. Д. - Приведенный выше пример больше похож на подход WinForms - он будет работать в WPF, но это неправильно путь.
Читайте также: