[ad_1]
Hola, tengo una clase de cuadro combinado personalizado.
En algunos casos necesito que esté deshabilitado sin que esté atenuado y en otros necesito que esté habilitado con datos cargados de una fuente de datos de la base de datos del servidor SQL a través de una consulta SQL.
Entonces pensé en esto, entrar a mi clase personalizada.
y crear un evento MouseMove personalizado para que pierda el foco cuando quiera desactivarlo. Pero no sé cómo anularlo, porque tengo un argumento adicional de tipo bool para Desactivar.
private void CustomCbo_MouseMove(object sender, MouseEventArgs e, bool Disable) { if (Disable) { this.Parent.Focus(); this.SelectionLength = 0; } }
Sin embargo, encontré en otro sitio lo siguiente, está bien, pero no lo entiendo muy bien y también necesito lo contrario para habilitar el
CustomCombo para tener los valores apropiados de fuente de datos de mi base de datos.
public void DisableComboWithoutGrayedOut() { //Appearence Enable, behavior Disabled this.DropDownHeight = 1; this.KeyDown += (s, e) => e.Handled = true; this.KeyPress += (s, e) => e.Handled = true; this.KeyUp += (s, e) => e.Handled = true; }
En caso de que utilice la propiedad Enabled, está bien, pero no me gusta que aparezca en gris. Y ComboBox no tiene una propiedad ReadOnly como los cuadros de texto.
Cualquier sugerencia y explicación para ambos sentidos, por favor, será muy apreciada. Muchas gracias de antemano.
Lo que he probado:
private void CustomCbo_MouseMove(object sender, MouseEventArgs e, bool Disable) { if (Disable) { this.Parent.Focus(); this.SelectionLength = 0; } } public void DisableComboWithoutGrayedOut() { //Appearence Enable, behavior Disabled this.DropDownHeight = 1; this.KeyDown += (s, e) => e.Handled = true; this.KeyPress += (s, e) => e.Handled = true; this.KeyUp += (s, e) => e.Handled = true; }
Solución 1
El objetivo es que el ComboBox en realidad no esté deshabilitado, pero el menú desplegable está configurado en 1 para que baje, pero como solo hay 1 píxel no lo verá.
Las otras propiedades de los controladores KeyDown, KeyPress y KeyUp, e.Handled, están configuradas en verdadero, lo que significa que el evento ha sido manejado y no se hace nada más.
Solución 2
Aquí está mi clase CustomCombo
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.ComponentModel; using System.Drawing; namespace AngelTechShop { public class CustomCombo : ComboBox { public CustomCombo() { BorderColor = Color.DimGray; } [Browsable(true)] [Category("Appearance")] [DefaultValue(typeof(Color), "DimGray")] public Color BorderColor { get; set; } private const int WM_PAINT = 0xF; private int buttonWidth = SystemInformation.HorizontalScrollBarArrowWidth; private bool mDisable; public bool Disable { get { return mDisable; } set { mDisable = value; } } protected override void WndProc(ref Message m) { base.WndProc(ref m); if (m.Msg == WM_PAINT) { using (var g = Graphics.FromHwnd(Handle)) { // Uncomment this if you don't want the "highlight border". using (var p = new Pen(this.BorderColor, 1)) { g.DrawRectangle(p, 0, 0, Width - 1, Height - 1); } using (var p = new Pen(this.BorderColor, 2)) { g.DrawRectangle(p, 0, 0, Width, Height); } } } } } }
[ad_2]
コメント