Все в порядке, но.
Этот текст мало кто будет читать и мы можем написать здесь все, что угодно, например.
Вы живете в неведении. Роботы уже вторглись в нашу жизнь и быстро захватывают мир, но мы встали на светлый путь и боремся за выживание человечества. А если серьезно, то.
В целях обеспечения безопасности сайта от кибератак нам необходимо убедиться, что вы человек. Если данная страница выводится вам часто, есть вероятность, что ваш компьютер заражен или вы используете для доступа IP адрес зараженных компьютеров.
Если это ваш частный компьютер и вы пытаетесь зайти на сайт, например, из дома — мы рекомендуем вам проверить ваш компьютер на наличие вирусов.
Если вы пытаетесь зайти на сайт, например, с работы или открытых сетей — вам необходимо обратиться с системному администратору и сообщить, что о возможном заражении компьютеров в вашей сети.
- © 2005-2023, «4PDA». 4PDA® — зарегистрированный товарный знак.
WPF, Поле ввода с подсказкой
Это полезно в те моменты, когда надо сэкономить место, выделить особое поле или просто лишний раз дать подсказку совсем ничего не понимающим пользователям.
Что нам необходимо?
Во первых, свойство, которое отвечает за текст подсказки. Без него что-то отобразить будет довольно сложно.
Создадим класс-заготовку.
public class WatermarkedTextBox : DependencyObject
#region Fields
private const string _defaultWatermark = «None» ;
public static readonly DependencyProperty WatermarkTextProperty = DependencyProperty.Register( «WatermarkText» , typeof ( string ), typeof (WatermarkedTextBox), new UIPropertyMetadata( string .Empty, OnWatermarkTextChanged));
///
///
public WatermarkedTextBox()
: this (_defaultWatermark)
>
///
///
/// The watermark to show when value is
WatermarkText = watermark;
>
public static void OnWatermarkTextChanged(DependencyObject box, DependencyPropertyChangedEventArgs e)
//Add changed functionality here
>
* This source code was highlighted with Source Code Highlighter .
Теперь, когда создана заготовка и у нас имеются необходимые свойства и методы оперирования с подсказкой, можно приступать непосредственно к реализации. С ходу можно придумать множество вариантов реализации:
Например, можно повесить свои обработчики на установку-получение текста и выводить подсказку как обычный текст (Не раз видел подобное в различных html-формах).
Можно агреггировать TextBox , написать логику и сделать собственное отображение данных.
Но мы воспользуемся третьим, наиболее правильным методом в контексте WPF. Будем использовать стили, чтобы переопределить отображение контрола, а именно переопределим Control Template.
Сказано-сделано. Для начала, унаследуем наш класс от TextBox (вместо DependencyObject ).
Если заглянуть вот сюда, то можно увидеть следующий текст.
The ControlTemplate for a TextBox must contain exactly one element that is tagged as the content host element; this element will be used to render the contents of the TextBox. To tag an element as the content host, assign it the special name PART_ContentHost. The content host element must be either a ScrollViewer or an AdornerDecorator. The content host element may not host any child elements.
Это значит, что в шаблоне необходимо будет создать ScrollViewer с именем PART_ContentHost.
Итак, коварный план таков: в те моменты, когда текст внутри TextBox отсутствует — будем показывать заготовленную надпись, из отдельного TextBlock а, иначе будем притворяться обычным TextBox .
То есть где-то внутри нашего стиля будет находится:
< TextBlock x:Name ="WatermarkText" Text ="" Foreground ="Gray" Margin ="5,0,0,0" HorizontalAlignment ="Left" VerticalAlignment ="Center" Visibility ="Collapsed" IsHitTestVisible ="False" />
* This source code was highlighted with Source Code Highlighter .
Я добавил несколько красот в виде отступов и цвета, чтобы усилия были лучше заметны.
И для него можно будет написать следующие триггеры:
* This source code was highlighted with Source Code Highlighter .
Они обеспечат нам показ текста-подсказки в тот момент, когда значение в поле текста отсутствует и при этом поле находится в состоянии отличном от состояния ввода. К сожалению, приходится писать два практически одинаковых триггера, чтобы одинаково хорошо обрабатывались и string .Empty и null .
Итак, все составные части у имеются, остаётся их обьеденить. В этом нет ничего сложного.
* This source code was highlighted with Source Code Highlighter .
Аккуратненько соединили все части, добавили в стиль страницы. Теоретически, уже можно кричать ура и топать ногами в экстазе, но если запустить приложение, то окажется, что рамка куда-то пропала. Попытаемся восстановить эту несправедливость оборачиванием грида.
Как сделать в textbox подсказку
MyTetra Share
Делитесь знаниями!
TextBox Подсказка
Время создания: 04.10.2019 23:38
Текстовые метки: c#, winforms, textbox, TextBox подсказка
Раздел: Компьютер — C# — WinForms — TextBox
Запись: Kozlov-AE/Tetra/master/base/1570221515kssqse4slb/text.html на raw.githubusercontent.com
В WinForms это решается созданием класса-наследника от TextBox , отправлающего самому себе сообщение EM_SETCUEBANNER :
using System;
using System.ComponentModel;
using System.Windows.Forms;
using System.Runtime.InteropServices;
class CueTextBox : TextBox
[Localizable(true)]
public string Cue
get return mCue; >
private void updateCue()
if (this.IsHandleCreated && mCue != null)
SendMessage(this.Handle, 0x1501, (IntPtr)1, mCue);
protected override void OnHandleCreated(EventArgs e)
base.OnHandleCreated(e);
updateCue();
private string mCue;
// PInvoke
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, string lp);
Добавляете этот класс в проект, компилируете, потом бросаете CueTextBox из Toolbox на форму и задаете свойство Cue . В остальном он ведет себя так же, как стандартный TextBox .
Всплывающая подсказка по textBox’ом
Всем привет, народ, может кто знает как на C# реализовать всплывающую подсказку при вводе текста в элемент управления textBox, наподобии того как это сделано у Google, или Яндекс?
Это не Веб-приложение, а десктопное
Мне нужно чтоб когда пользователь вводил символы в текстовое поле, из базы данных брались текстовые строки, и выводились бы под textBox’ом.