Zorgatone - WindowsFormsCueComponents
Adds the ability to set a Cue Banner for four components of Windows Form: TextBox, ComboBox and their ToolStrip variants.
| using System; | |
| using System.ComponentModel; | |
| using System.Runtime.InteropServices; | |
| using System.Windows.Forms; | |
| namespace Zorgatone.WindowsFormsCueComponents | |
| { | |
| public class CueComboBox : ComboBox | |
| { | |
| #region PInvoke Helpers | |
| private static uint CB_SETCUEBANNER = 0x1703; | |
| [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)] | |
| private static extern IntPtr SendMessage(HandleRef hWnd, uint Msg, IntPtr wParam, String lParam); | |
| #endregion PInvoke Helpers | |
| #region CueText | |
| private string _cueText = String.Empty; | |
| /// <summary> | |
| /// Gets or sets the text the <see cref="ComboBox"/> will display as a cue to the user. | |
| /// </summary> | |
| [Description("The text value to be displayed as a cue to the user.")] | |
| [Category("Appearance")] | |
| [DefaultValue("")] | |
| [Localizable(true)] | |
| public string CueText | |
| { | |
| get { return _cueText; } | |
| set | |
| { | |
| if (value == null) | |
| { | |
| value = String.Empty; | |
| } | |
| if (!_cueText.Equals(value, StringComparison.CurrentCulture)) | |
| { | |
| _cueText = value; | |
| UpdateCue(); | |
| OnCueTextChanged(EventArgs.Empty); | |
| } | |
| } | |
| } | |
| /// <summary> | |
| /// Occurs when the <see cref="CueText"/> property value changes. | |
| /// </summary> | |
| public event EventHandler CueTextChanged; | |
| [EditorBrowsable(EditorBrowsableState.Advanced)] | |
| protected virtual void OnCueTextChanged(EventArgs e) | |
| { | |
| EventHandler handler = CueTextChanged; | |
| if (handler != null) | |
| { | |
| handler(this, e); | |
| } | |
| } | |
| #endregion CueText | |
| #region Overrides | |
| protected override void OnHandleCreated(EventArgs e) | |
| { | |
| UpdateCue(); | |
| base.OnHandleCreated(e); | |
| } | |
| #endregion Overrides | |
| private void UpdateCue() | |
| { | |
| // If the handle isn't yet created, | |
| // this will be called when it is created | |
| if (this.IsHandleCreated) | |
| { | |
| SendMessage(new HandleRef(this, this.Handle), CB_SETCUEBANNER, IntPtr.Zero, _cueText); | |
| } | |
| } | |
| } | |
| } |
| using System; | |
| using System.ComponentModel; | |
| using System.Runtime.InteropServices; | |
| using System.Windows.Forms; | |
| namespace Zorgatone.WindowsFormsCueComponents | |
| { | |
| public class CueTextBox : TextBox | |
| { | |
| #region PInvoke Helpers | |
| private static uint ECM_FIRST = 0x1500; | |
| private static uint EM_SETCUEBANNER = ECM_FIRST + 1; | |
| [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)] | |
| private static extern IntPtr SendMessage(HandleRef hWnd, uint Msg, IntPtr wParam, String lParam); | |
| #endregion PInvoke Helpers | |
| #region CueText | |
| private string _cueText = String.Empty; | |
| /// <summary> | |
| /// Gets or sets the text the <see cref="TextBox"/> will display as a cue to the user. | |
| /// </summary> | |
| [Description("The text value to be displayed as a cue to the user.")] | |
| [Category("Appearance")] | |
| [DefaultValue("")] | |
| [Localizable(true)] | |
| public string CueText | |
| { | |
| get { return _cueText; } | |
| set | |
| { | |
| if (value == null) | |
| { | |
| value = String.Empty; | |
| } | |
| if (!_cueText.Equals(value, StringComparison.CurrentCulture)) | |
| { | |
| _cueText = value; | |
| UpdateCue(); | |
| OnCueTextChanged(EventArgs.Empty); | |
| } | |
| } | |
| } | |
| /// <summary> | |
| /// Occurs when the <see cref="CueText"/> property value changes. | |
| /// </summary> | |
| public event EventHandler CueTextChanged; | |
| [EditorBrowsable(EditorBrowsableState.Advanced)] | |
| protected virtual void OnCueTextChanged(EventArgs e) | |
| { | |
| EventHandler handler = CueTextChanged; | |
| if (handler != null) | |
| { | |
| handler(this, e); | |
| } | |
| } | |
| #endregion CueText | |
| #region ShowCueTextOnFocus | |
| private bool _showCueTextWithFocus = false; | |
| /// <summary> | |
| /// Gets or sets a value indicating whether the <see cref="TextBox"/> will display the <see cref="CueText"/> | |
| /// even when the control has focus. | |
| /// </summary> | |
| [Description("Indicates whether the CueText will be displayed even when the control has focus.")] | |
| [Category("Appearance")] | |
| [DefaultValue(false)] | |
| [Localizable(true)] | |
| public bool ShowCueTextWithFocus | |
| { | |
| get { return _showCueTextWithFocus; } | |
| set | |
| { | |
| if (_showCueTextWithFocus != value) | |
| { | |
| _showCueTextWithFocus = value; | |
| UpdateCue(); | |
| OnShowCueTextWithFocusChanged(EventArgs.Empty); | |
| } | |
| } | |
| } | |
| /// <summary> | |
| /// Occurs when the <see cref="ShowCueTextWithFocus"/> property value changes. | |
| /// </summary> | |
| public event EventHandler ShowCueTextWithFocusChanged; | |
| [EditorBrowsable(EditorBrowsableState.Advanced)] | |
| protected virtual void OnShowCueTextWithFocusChanged(EventArgs e) | |
| { | |
| EventHandler handler = ShowCueTextWithFocusChanged; | |
| if (handler != null) | |
| { | |
| handler(this, e); | |
| } | |
| } | |
| #endregion ShowCueTextOnFocus | |
| #region Overrides | |
| protected override void OnHandleCreated(EventArgs e) | |
| { | |
| UpdateCue(); | |
| base.OnHandleCreated(e); | |
| } | |
| #endregion Overrides | |
| private void UpdateCue() | |
| { | |
| // If the handle isn't yet created, | |
| // this will be called when it is created | |
| if (this.IsHandleCreated) | |
| { | |
| SendMessage(new HandleRef(this, this.Handle), EM_SETCUEBANNER, (_showCueTextWithFocus) ? new IntPtr(1) : IntPtr.Zero, _cueText); | |
| } | |
| } | |
| } | |
| } |
| using System; | |
| using System.ComponentModel; | |
| using System.Runtime.InteropServices; | |
| using System.Windows.Forms; | |
| namespace Zorgatone.CueForms | |
| { | |
| public class CueToolStripComboBox : ToolStripComboBox | |
| { | |
| public CueToolStripComboBox() | |
| : base() | |
| { | |
| if (this.Control != null) | |
| { | |
| this.Control.HandleCreated += new EventHandler(OnControlHandleCreated); | |
| } | |
| } | |
| public CueToolStripComboBox(string name) | |
| : base(name) | |
| { | |
| if (this.Control != null) | |
| { | |
| this.Control.HandleCreated += new EventHandler(OnControlHandleCreated); | |
| } | |
| } | |
| protected override void Dispose(bool disposing) | |
| { | |
| if (disposing) | |
| { | |
| if (this.Control != null) | |
| { | |
| this.Control.HandleCreated -= new EventHandler(OnControlHandleCreated); | |
| } | |
| } | |
| base.Dispose(disposing); | |
| } | |
| void OnControlHandleCreated(object sender, EventArgs e) | |
| { | |
| UpdateCue(); | |
| } | |
| #region PInvoke Helpers | |
| private static uint EM_SETCUEBANNER = 0x1703; | |
| [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)] | |
| private static extern IntPtr SendMessage(HandleRef hWnd, uint Msg, IntPtr wParam, String lParam); | |
| #endregion PInvoke Helpers | |
| #region CueText | |
| private string _cueText = String.Empty; | |
| /// <summary> | |
| /// Gets or sets the text the <see cref="TextBox"/> will display as a cue to the user. | |
| /// </summary> | |
| [Description("The text value to be displayed as a cue to the user.")] | |
| [Category("Appearance")] | |
| [DefaultValue("")] | |
| [Localizable(true)] | |
| public string CueText | |
| { | |
| get { return _cueText; } | |
| set | |
| { | |
| if (value == null) | |
| { | |
| value = String.Empty; | |
| } | |
| if (!_cueText.Equals(value, StringComparison.CurrentCulture)) | |
| { | |
| _cueText = value; | |
| UpdateCue(); | |
| OnCueTextChanged(EventArgs.Empty); | |
| } | |
| } | |
| } | |
| /// <summary> | |
| /// Occurs when the <see cref="CueText"/> property value changes. | |
| /// </summary> | |
| public event EventHandler CueTextChanged; | |
| [EditorBrowsable(EditorBrowsableState.Advanced)] | |
| protected virtual void OnCueTextChanged(EventArgs e) | |
| { | |
| EventHandler handler = CueTextChanged; | |
| if (handler != null) | |
| { | |
| handler(this, e); | |
| } | |
| } | |
| #endregion CueText | |
| #region ShowCueTextOnFocus | |
| private bool _showCueTextWithFocus = false; | |
| /// <summary> | |
| /// Gets or sets a value indicating whether the <see cref="TextBox"/> will display the <see cref="CueText"/> | |
| /// even when the control has focus. | |
| /// </summary> | |
| [Description("Indicates whether the CueText will be displayed even when the control has focus.")] | |
| [Category("Appearance")] | |
| [DefaultValue(false)] | |
| [Localizable(true)] | |
| public bool ShowCueTextWithFocus | |
| { | |
| get { return _showCueTextWithFocus; } | |
| set | |
| { | |
| if (_showCueTextWithFocus != value) | |
| { | |
| _showCueTextWithFocus = value; | |
| UpdateCue(); | |
| OnShowCueTextWithFocusChanged(EventArgs.Empty); | |
| } | |
| } | |
| } | |
| /// <summary> | |
| /// Occurs when the <see cref="ShowCueTextWithFocus"/> property value changes. | |
| /// </summary> | |
| public event EventHandler ShowCueTextWithFocusChanged; | |
| [EditorBrowsable(EditorBrowsableState.Advanced)] | |
| protected virtual void OnShowCueTextWithFocusChanged(EventArgs e) | |
| { | |
| EventHandler handler = ShowCueTextWithFocusChanged; | |
| if (handler != null) | |
| { | |
| handler(this, e); | |
| } | |
| } | |
| #endregion ShowCueTextOnFocus | |
| private void UpdateCue() | |
| { | |
| // If the handle isn't yet created, | |
| // this will be called when it is created | |
| if ((this.Control != null) && (this.Control.IsHandleCreated)) | |
| { | |
| SendMessage(new HandleRef(this.Control, this.Control.Handle), EM_SETCUEBANNER, (_showCueTextWithFocus) ? new IntPtr(1) : IntPtr.Zero, _cueText); | |
| } | |
| } | |
| } | |
| } |
| using System; | |
| using System.ComponentModel; | |
| using System.Runtime.InteropServices; | |
| using System.Windows.Forms; | |
| namespace Zorgatone.WindowsFormsCueComponents | |
| { | |
| public class CueToolStripTextBox : ToolStripTextBox | |
| { | |
| public CueToolStripTextBox() | |
| : base() | |
| { | |
| if (this.Control != null) | |
| { | |
| this.Control.HandleCreated += new EventHandler(OnControlHandleCreated); | |
| } | |
| } | |
| public CueToolStripTextBox(string name) | |
| : base(name) | |
| { | |
| if (this.Control != null) | |
| { | |
| this.Control.HandleCreated += new EventHandler(OnControlHandleCreated); | |
| } | |
| } | |
| protected override void Dispose(bool disposing) | |
| { | |
| if (disposing) | |
| { | |
| if (this.Control != null) | |
| { | |
| this.Control.HandleCreated -= new EventHandler(OnControlHandleCreated); | |
| } | |
| } | |
| base.Dispose(disposing); | |
| } | |
| void OnControlHandleCreated(object sender, EventArgs e) | |
| { | |
| UpdateCue(); | |
| } | |
| #region PInvoke Helpers | |
| private static uint ECM_FIRST = 0x1500; | |
| private static uint EM_SETCUEBANNER = ECM_FIRST + 1; | |
| [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)] | |
| private static extern IntPtr SendMessage(HandleRef hWnd, uint Msg, IntPtr wParam, String lParam); | |
| #endregion PInvoke Helpers | |
| #region CueText | |
| private string _cueText = String.Empty; | |
| /// <summary> | |
| /// Gets or sets the text the <see cref="TextBox"/> will display as a cue to the user. | |
| /// </summary> | |
| [Description("The text value to be displayed as a cue to the user.")] | |
| [Category("Appearance")] | |
| [DefaultValue("")] | |
| [Localizable(true)] | |
| public string CueText | |
| { | |
| get { return _cueText; } | |
| set | |
| { | |
| if (value == null) | |
| { | |
| value = String.Empty; | |
| } | |
| if (!_cueText.Equals(value, StringComparison.CurrentCulture)) | |
| { | |
| _cueText = value; | |
| UpdateCue(); | |
| OnCueTextChanged(EventArgs.Empty); | |
| } | |
| } | |
| } | |
| /// <summary> | |
| /// Occurs when the <see cref="CueText"/> property value changes. | |
| /// </summary> | |
| public event EventHandler CueTextChanged; | |
| [EditorBrowsable(EditorBrowsableState.Advanced)] | |
| protected virtual void OnCueTextChanged(EventArgs e) | |
| { | |
| EventHandler handler = CueTextChanged; | |
| if (handler != null) | |
| { | |
| handler(this, e); | |
| } | |
| } | |
| #endregion CueText | |
| #region ShowCueTextOnFocus | |
| private bool _showCueTextWithFocus = false; | |
| /// <summary> | |
| /// Gets or sets a value indicating whether the <see cref="TextBox"/> will display the <see cref="CueText"/> | |
| /// even when the control has focus. | |
| /// </summary> | |
| [Description("Indicates whether the CueText will be displayed even when the control has focus.")] | |
| [Category("Appearance")] | |
| [DefaultValue(false)] | |
| [Localizable(true)] | |
| public bool ShowCueTextWithFocus | |
| { | |
| get { return _showCueTextWithFocus; } | |
| set | |
| { | |
| if (_showCueTextWithFocus != value) | |
| { | |
| _showCueTextWithFocus = value; | |
| UpdateCue(); | |
| OnShowCueTextWithFocusChanged(EventArgs.Empty); | |
| } | |
| } | |
| } | |
| /// <summary> | |
| /// Occurs when the <see cref="ShowCueTextWithFocus"/> property value changes. | |
| /// </summary> | |
| public event EventHandler ShowCueTextWithFocusChanged; | |
| [EditorBrowsable(EditorBrowsableState.Advanced)] | |
| protected virtual void OnShowCueTextWithFocusChanged(EventArgs e) | |
| { | |
| EventHandler handler = ShowCueTextWithFocusChanged; | |
| if (handler != null) | |
| { | |
| handler(this, e); | |
| } | |
| } | |
| #endregion ShowCueTextOnFocus | |
| private void UpdateCue() | |
| { | |
| // If the handle isn't yet created, | |
| // this will be called when it is created | |
| if ((this.Control != null) && (this.Control.IsHandleCreated)) | |
| { | |
| SendMessage(new HandleRef(this.Control, this.Control.Handle), EM_SETCUEBANNER, (_showCueTextWithFocus) ? new IntPtr(1) : IntPtr.Zero, _cueText); | |
| } | |
| } | |
| } | |
| } |