Как я могу отключить хит-тесты в форме Windows? - PullRequest
0 голосов
/ 30 мая 2009

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

Спасибо заранее, Christoph

Ответы [ 3 ]

0 голосов
/ 31 мая 2009

Ну, я до сих пор не знаю много о вашем случае использования, но я все равно сделаю удар и приведу простой пример.

Я предполагаю, что вы хотите что-то контролировать в главной форме из вашей плавающей формы. Для этого вам нужна ссылка на вашу основную форму из вашей плавающей формы. Вы делаете это путем создания перегрузки конструктора в вашей плавающей форме, которая принимает экземпляр вашей основной формы, например:

    public FloatingForm(MainForm mainForm)
    {
        InitializeComponent();
        _mainForm = mainForm;
    }

Плавающая форма содержит текстовое поле с именем floatFormTextBox и кнопку с именем 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();
    }
}

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

0 голосов
/ 31 мая 2009

Если вы говорите с другим процессом, вам нужно отправлять и получать сообщения 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 ++, которая отправляет сообщения в очередь сообщений перехватывающего приложения.

0 голосов
/ 30 мая 2009

Хотите окно, которое нельзя переместить? Установите для FormBorderStyle значение none.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...