¿Cómo puedo desactivar hittests en un formulario Windows?
Pregunta
¿Es posible desactivar el más caliente en una ventana de Windows Forms, y si es así, ¿cómo lo hago? Quiero tener una ventana opaca que no se puede hacer clic. Gracias de antemano, Christoph
Solución
Si estamos hablando de un proceso diferente, que necesita para enviar y recuperar mensajes de Windows.
Tener un vistazo a este enlace:
El uso de mensajes de ventana para implementar Global System ganchos en C # http://www.codeproject.com/KB/system/WilsonSystemGlobalHooks.aspx
Los ganchos del sistema global permiten una aplicación para interceptar mensajes de Windows destinados a otras aplicaciones. Esto siempre ha sido difícil (imposible, de acuerdo con MSDN) para implementar en C #. En este artículo se intenta implementar enlaces globales del sistema mediante la creación de una envoltura DLL en C ++ que en sus mensajes a la cola de mensajes de la aplicación de enganche.
Otros consejos
¿Quieres una ventana que no se puede mover? Establecer FormBorderStyle a ninguno.
Bueno, todavía no se sabe mucho acerca de su caso de uso, pero me quedo con una punzada de todos modos, y proporcionar un ejemplo sencillo.
Asumo que desea controlar algo en el formulario principal de su forma flotante. Para ello, se necesita una referencia a su forma principal de su forma flotante. Esto se hace mediante la creación de una sobrecarga del constructor en la forma flotante que acepta una instancia del formulario principal, por ejemplo:
public FloatingForm(MainForm mainForm)
{
InitializeComponent();
_mainForm = mainForm;
}
La forma flotante contiene un cuadro de texto llamado floatingFormTextBox, y un botón denominado Button1. La clase parcial para la forma flotante se ve así:
public partial class FloatingForm : Form
{
MainForm _mainForm;
public FloatingForm()
{
InitializeComponent();
}
public FloatingForm(MainForm mainForm)
{
InitializeComponent();
_mainForm = mainForm;
}
private void button1_Click(object sender, EventArgs e)
{
_mainForm.DoSomething(floatingFormTextBox.Text);
}
}
La forma principal sólo contiene un cuadro de texto llamado mainFormTextBox. Cuando los principales cargue el formulario, se crea una instancia de forma flotante, pasando una referencia a sí mismo a la nueva sobrecarga el constructor de forma flotante. La clase parcial para el formulario principal es el siguiente:
public partial class MainForm : Form
{
FloatingForm _floatingForm;
public MainForm()
{
InitializeComponent();
}
public void DoSomething(string text)
{
mainFormTextBox.Text = text;
this.Refresh();
}
private void MainForm_Load(object sender, EventArgs e)
{
_floatingForm = new FloatingForm(this);
_floatingForm.Show();
}
}
Ahora, cuando pongo un texto en el cuadro de texto del formulario flotante y haga clic en el botón, el texto aparece en el cuadro de texto del formulario principal.