Come è possibile disattivare hittests su un Windows Form?
Domanda
E 'possibile disabilitare il più caldo in una finestra Windows Form, e se sì, come posso fare? Voglio avere una finestra opaca che non può essere cliccato. Grazie in anticipo, Christoph
Soluzione
Se stai parlando con un processo diverso, è necessario inviare e ricevere messaggi di Windows.
Date un'occhiata a questo link:
Utilizzo di messaggi di finestra per implementare Global System Ganci in C # http://www.codeproject.com/KB/system/WilsonSystemGlobalHooks.aspx
ganci sistema globale consentono un'applicazione per intercettare i messaggi di Windows destinati ad altre applicazioni. Questo è sempre stato difficile (impossibile, secondo MSDN) da implementare in C #. Questo articolo tenta di implementare hook di sistema globali con la creazione di un wrapper DLL in C ++ che i messaggi messaggi alla coda di messaggi dell'applicazione di aggancio.
Altri suggerimenti
Vuoi una finestra che non può essere spostato? Impostare FormBorderStyle a nessuno.
Beh, io ancora non so molto su vostro caso d'uso, ma mi prendo una pugnalata in ogni caso, e di fornire un semplice esempio.
Presumo che si desidera controllare qualcosa sulla forma principale dal modulo galleggiante. Per fare questo, è necessario un riferimento al modulo principale dal modulo galleggiante. A tale scopo, la creazione di un sovraccarico di costruttore nel modulo galleggiante che accetta un'istanza del modulo principale, in questo modo:
public FloatingForm(MainForm mainForm)
{
InitializeComponent();
_mainForm = mainForm;
}
Il modulo galleggiante contiene una casella di testo di nome floatingFormTextBox, e un pulsante denominato Button1. La classe parziale per il modulo galleggiante simile a questa:
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 principale forma solo contiene una casella di testo di nome mainFormTextBox. Quando i carichi principali del modulo, si crea un'istanza del modulo galleggiante, passando un riferimento a se stesso per nuovo sovraccarico costruttore della forma galleggiante. La classe parziale per la forma principale appare così:
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();
}
}
Ora, quando ho messo un po 'di testo nella casella di testo del modulo galleggiante e cliccare sul pulsante, il testo si presenta nella casella di testo del form principale.