Вопрос

Можно ли отключить hittest в окне Windows Forms, и если да, то как мне это сделать?Я хочу иметь непрозрачное окно, по которому нельзя щелкнуть.

Заранее спасибо, Кристоф

Это было полезно?

Решение

Если вы общаетесь с другим процессом, вам необходимо отправлять и извлекать сообщения Windows.

http://www.c-sharpcorner.com/UploadFile/thmok/SendingWindowsMessageinCSharp11262005042819AM/SendingWindowsMessageinCSharp.aspx

Взгляните на эту ссылку:

Использование оконных сообщений для реализации глобальных системных перехватов в 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();
    }
}

Теперь, когда я помещаю некоторый текст в текстовое поле плавающей формы и нажимаю кнопку, текст отображается в текстовом поле основной формы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top