Как я могу отключить hittests в Windows Form?
Вопрос
Можно ли отключить hittest в окне Windows Forms, и если да, то как мне это сделать?Я хочу иметь непрозрачное окно, по которому нельзя щелкнуть.
Заранее спасибо, Кристоф
Решение
Если вы общаетесь с другим процессом, вам необходимо отправлять и извлекать сообщения Windows.
Взгляните на эту ссылку:
Использование оконных сообщений для реализации глобальных системных перехватов в C# http://www.codeproject.com/KB/system/WilsonSystemGlobalHooks.aspx
Глобальные системные перехваты позволяют приложению перехватывать сообщения Windows, предназначенные для других приложений.Это всегда было трудно (согласно MSDN, невозможно) реализовать на C #.В этой статье предпринята попытка реализовать глобальные системные перехваты путем создания DLL-оболочки на C ++, которая отправляет сообщения в очередь сообщений приложения перехвата.
Другие советы
Вам нужно окно, которое нельзя перемещать?Установите для FormBorderStyle значение none.
Что ж, я все еще мало что знаю о вашем варианте использования, но я все равно попробую и приведу простой пример.
Я предполагаю, что вы хотите управлять чем-то в основной форме из своей плавающей формы.Чтобы сделать это, вам нужна ссылка на вашу основную форму из вашей плавающей формы.Вы делаете это, создавая перегрузку конструктора в вашей плавающей форме, которая принимает экземпляр вашей основной формы, например, так:
public FloatingForm(MainForm mainForm)
{
InitializeComponent();
_mainForm = mainForm;
}
Плавающая форма содержит текстовое поле с именем floatingFormTextBox и кнопку с именем Button1.Частичный класс для плавающей формы выглядит следующим образом:
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);
}
}
Основная форма просто содержит текстовое поле с именем mainFormTextBox.Когда основная форма загружается, она создает экземпляр плавающей формы, передавая ссылку на саму себя в перегрузку нового конструктора плавающей формы.Частичный класс для основной формы выглядит следующим образом:
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();
}
}
Теперь, когда я помещаю некоторый текст в текстовое поле плавающей формы и нажимаю кнопку, текст отображается в текстовом поле основной формы.