powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Показ Form2 из Form1 с сохранением фокуса в Form1
13 сообщений из 13, страница 1 из 1
Показ Form2 из Form1 с сохранением фокуса в Form1
    #39845222
AlexV1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Помогите пожалуйста решить небольшую проблемку.
Проект C# (WinForms).
В Form1 по кнопке создаю Form2 типа Form и кладу на Form2 единственный Label.

Задача: Показать Form2, но чтобы на нее не перешел фокус, а остался в Form1, то есть чтобы в Form1 даже не сработал Deactivate.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
Label L = new Label();
L.Text = "Текст";

Form ff = new Form();
ff.Name = "Form2";
ff.ShowInTaskbar = false;
ff.Controls.Add(L);
ff.TopMost = true;
ff.Show();   // в этот момент фокус переходит в ff, т.к. она становится активной и происходит Deactivate в Form1


Модератор: Учимся использовать тэги оформления кода - FAQ
Пробовал Disabl'iть L и ff - не помогает. Deactivate у Form1 все равно срабатывает.
Может какие св-ва в ff выставить ...
...
Рейтинг: 0 / 0
Показ Form2 из Form1 с сохранением фокуса в Form1
    #39845462
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexV1... чтобы в Form1 даже не сработал Deactivate.

Наверно никак.
Фокус вернуть на Form1 можно.
...
Рейтинг: 0 / 0
Показ Form2 из Form1 с сохранением фокуса в Form1
    #39845620
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
через винапи это делает онли
...
Рейтинг: 0 / 0
Показ Form2 из Form1 с сохранением фокуса в Form1
    #39845637
AlexV1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторчерез винапи это делает онли
Да? а поподробней можно?
...
Рейтинг: 0 / 0
Показ Form2 из Form1 с сохранением фокуса в Form1
    #39845672
AlexV1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Насчет API.
Код: c#
1.
ShowWindow(ff.Handle, SW_SHOWNOACTIVATE); // SW_SHOWNOACTIVATE = 4; // Displays a window in its most recent size and position. This value is similar to SW_SHOWNORMAL, except that the window is not activated.


Да, действительно показало форму Form2, не активировав ее.

Но вот Deactivate у From1 все равно почему то сработал, вот зараза то.
...
Рейтинг: 0 / 0
Показ Form2 из Form1 с сохранением фокуса в Form1
    #39845673
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexV1авторчерез винапи это делает онли
Да? а поподробней можно?
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
private const int WS_EX_TRANSPARENT = 0x00000020;
private const int GWL_EXSTYLE = (-20);

[DllImport("user32.dll", EntryPoint = "GetWindowLong")]
private static extern int GetWindowLong(IntPtr hwnd, int index);

[DllImport("user32.dll", EntryPoint = "SetWindowLong")]
private static extern int SetWindowLong(IntPtr hwnd, int index, int newStyle);

public static void SetWindowExTransparent(IntPtr hwnd)
{
    int extendedStyle = GetWindowLong(hwnd, GWL_EXSTYLE);
    SetWindowLong(hwnd, GWL_EXSTYLE, extendedStyle | WS_EX_TRANSPARENT);
}


После того как к окну будет применен данный стиль верните фокус в основное окно, а окно к которому применили стиль перестанет отвечать на сообщения и обрабатывать события, фокус к него не должен переключаться, офк ввод тоже будет недоступен
hwnd окна в WF получить, вроде как, плёвое дело, оно есть прямо в свойствах формы
...
Рейтинг: 0 / 0
Показ Form2 из Form1 с сохранением фокуса в Form1
    #39845707
AlexV1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtes,
Deactivate у From1 все равно сработал.
Применял ваш рецепт к Form2.
К Form1 не вариант применять ваш рецепт, т.к. вместо Form1 может быть любая другая из 100 форм.

Я уже думаю, может программно у Form1 временно (на время Form2.Show) отключать все, что навешано на Form1.Deactivate путем присвоения null (предварительно запомнив список handlers), а потом восстановить обратно.

Или может есть способ без отписки/подписки просто отключить обработчики Form1.Deactivate (задизэйблить так сказать)?
...
Рейтинг: 0 / 0
Показ Form2 из Form1 с сохранением фокуса в Form1
    #39845717
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
всплывающие подсказки что ли сделать пытаетесь?
...
Рейтинг: 0 / 0
Показ Form2 из Form1 с сохранением фокуса в Form1
    #39845722
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Показ Form2 из Form1 с сохранением фокуса в Form1
    #39845742
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
просто добавьте условие в событие Deactivate
if (myState) return;
и не будет оно обрабатываться, в чем проблема, не понятно
если событие возбуждено, это еще не значит, что оно будет "обрабатываться" обработчиком в полном объёме
...
Рейтинг: 0 / 0
Показ Form2 из Form1 с сохранением фокуса в Form1
    #39845758
AlexV1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_Oneвсплывающие подсказки что ли сделать пытаетесь?
Да
Konst_Oneтут: https://stackoverflow.com/questions/156046/show-a-form-without-stealing-focus
Не помогло. Deactivate как ни крути у вызывающей формы срабатывает, хоть 2-я форма не активируется. Из 1-й все равно активность уходит куда то.

А так, задача прям как у меня :-)

Konst_Oneпросто добавьте условие в событие Deactivate
Код: c#
1.
if (myState) return;



Накрайняк можно, спасибо за подсказку.Просто неудобно что вместо Form1 у меня может быть 1 из 100 форм и во всех придется вставлять
if (myState) на Deactivate не забывать.
...
Рейтинг: 0 / 0
Показ Form2 из Form1 с сохранением фокуса в Form1
    #39845920
AlexV1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlexV1,

Тему можно закрывать.

В итоге Form2 заменил на Panel, т.к. Panel не забирает фокус у тек.формы.
Задача была - сделать класс типа Toast на Android'е (кратковременная всплывающая подсказка с закруглеными краями).
...
Рейтинг: 0 / 0
Показ Form2 из Form1 с сохранением фокуса в Form1
    #39845934
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Panel же будет плавать в рамках окна, а если она не влезет в окно?
так и не понял, в чем проблема, если честно. В чем проблема реализовать окно подсказку?
В WPF это вообще делается левой ногой, хоть круглый ToolTip, хоть треугольный
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Показ Form2 из Form1 с сохранением фокуса в Form1
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]