Как сделать пустое текстовое поле разместить элемент textbox

Обновлено: 08.07.2024

Чтение длинного текстового документа может утомить любого за считанные минуты. Однако есть несколько простых способов сделать ваши документы более привлекательными и привлекательными для читателя. Один из таких вариантов — добавить цветные текстовые поля между абзацами. Это полезный способ показать важные действия в полнотекстовых документах. В этой статье давайте рассмотрим, как создать текстовое поле в документе Word.

Связанный: Как быстро добавить разделители в Word?

Как создать текстовое поле в документах Word?

Мы обсудим следующие варианты на основе Word 2016 или более поздней версии.

  • Создать текстовое поле из существующего текста
  • Создание пустого текстового поля
  • Изменение размера и положения текстового поля
  • Изменение направления текста
  • Удаление границ

Создание текстового поля из существующего текста

Вы можете преобразовать любой существующий текстовый абзац и список в текстовое поле в Word. Посмотрим, как это сделать.

Создание пустого текстового поля

Конечно, вам не обязательно нужен существующий текст для создания нового текстового поля. Кроме того, вы также можете создать пустые текстовые поля и ввести в них текст позже.

Изменение размера и положения текстового поля

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

Изменение направления текста

В текстовом поле вы также можете влиять на направление текста. Помимо горизонтального выравнивания по умолчанию, текст также может располагаться вертикально.

Связанный: Как встроить таблицу Excel в документ Word?

Удаление границ и содержимого

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

Использование шаблонов текстовых полей

Шаблоны текстовых полей в Word

Шаблоны текстовых полей в 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 ??

Текстовое поле поиска Facebook

Вы можете сделать это намного проще с помощью 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, но это неправильно путь.

Читайте также: