6 / 4 / 0
Регистрация: 21.06.2024
Сообщений: 9

Снять фокус с формы

15.09.2024, 15:12. Показов 1488. Ответов 22
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.Подскажите пожалуйста,как при нажатии на кнопку снять программно фокус с формы?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.09.2024, 15:12
Ответы с готовыми решениями:

Как снять фокус с ComboBox
Доброго времени суток, извиняюсь за тупейший вопрос. К сожалению поиск в гугле не помог как и по форуму, либо не правильно формирую вопрос...

Как убрать фокус с формы?
Здравствуйте! Помогите решить задачу! Есть форма без шапки с двумя кнопками. Такое простенькое информационное окно в правом нижнем углу...

Как убрать фокус с TextBox при запуске формы
Итак, создал на форме TextBox, поместил в него текст. При запуске формы, тексто в нем автоматически выделяется. Подозреваю из-за того, что...

22
7 / 6 / 3
Регистрация: 03.12.2020
Сообщений: 302
16.09.2024, 07:03
На сколько понимаю я, формулировка вопроса не корректна: фокус нельзя снять, а только перевести... и, скорее всего, вас интересует не фокус, а активность?...
Есть несколько путей:
1. через хэндел найти любое (случайное) окно и сделать его активным.
2. выполнить программный клик мыши за пределами формы( по целевым координатам или случайным).
3. выполнить запуск какой-либо программы, которая при запуске утягивает за собой активность...
1
6 / 4 / 0
Регистрация: 21.06.2024
Сообщений: 9
16.09.2024, 11:00  [ТС]
Цитата Сообщение от filat18 Посмотреть сообщение
не фокус, а активность?
Конечно,не правильно сформулировал.Буду пробовать,Спасибо.
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4323 / 3397 / 507
Регистрация: 27.01.2014
Сообщений: 6,197
21.09.2024, 06:30
Лучший ответ Сообщение было отмечено Dimon1 как решение

Решение

Dimon1, Вам скорее всего нужно так, чтобы окно НЕ ПРИНИМАЛО фокус?
Тогда вам поможет WinAPI.
Я вроде выкладывал пример в готовых решениях, поищите.

Добавлено через 2 минуты
Dimon1, вот ссылочка на пост
Готовые решения и полезные коды на Visual Basic .NET (Часть-1)
2
6 / 4 / 0
Регистрация: 21.06.2024
Сообщений: 9
21.09.2024, 09:36  [ТС]
Нашел интересный вариант,нажать кнопку пуск
VB.NET Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
    Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
    Const KEYEVENTF_KEYUP = &H2 ' событие отпускания клавиши
    Const VK_LWIN = &H5B '  эмулируюция нажатия кнопки ПУСК
 
    Private Sub Win()
        Call keybd_event(VK_LWIN, 0, 0, 0) 'Hажимаем WIN
        Call keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP, 0) 'Отпускаем WIN
    End Sub
 
    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Win()
    End Sub
2
148 / 70 / 12
Регистрация: 11.02.2017
Сообщений: 310
22.09.2024, 10:50
Dimon1,
VB.NET Скопировано
1
2
3
4
5
6
7
8
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim frm As New Form2
    frm.Opacity = 0
    'frm.ControlBox = False
    'frm.FormBorderStyle = FormBorderStyle.None
    'frm.ShowInTaskbar = False
    frm.Show()
End Sub
Ну и проверка, что Form2 запущена при необходимости.
2
148 / 70 / 12
Регистрация: 11.02.2017
Сообщений: 310
22.09.2024, 11:01
Update
Миниатюры
Снять фокус с формы  
2
148 / 70 / 12
Регистрация: 11.02.2017
Сообщений: 310
22.09.2024, 12:14
Лучший ответ Сообщение было отмечено Dimon1 как решение

Решение

Dimon1,
VB.NET Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Public Class Form2
    Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
    Const MOUSEEVENTF_LEFTDOWN = &H2
    Const MOUSEEVENTF_LEFTUP = &H4
    Const MOUSEEVENTF_MIDDLEDOWN = &H20
    Const MOUSEEVENTF_MIDDLEUP = &H40
    Const MOUSEEVENTF_MOVE = &H1
    Const MOUSEEVENTF_ABSOLUTE = &H8000
    Const MOUSEEVENTF_RIGHTDOWN = &H8
    Const MOUSEEVENTF_RIGHTUP = &H10
    
    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        Dim pos As Point = New Point(Cursor.Position)
        Cursor.Position = New Point(5000, 0)
        mouse_event(MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
        Cursor.Position = pos
    End Sub
End Class
1
6 / 4 / 0
Регистрация: 21.06.2024
Сообщений: 9
22.09.2024, 16:18  [ТС]
Hell666, Со второй формой это немного не то,а второй вариант интересный,спасибо.
2
148 / 70 / 12
Регистрация: 11.02.2017
Сообщений: 310
22.09.2024, 17:05
Dimon1, Было бы немного понятнее, что предлагать, если бы знать какие цели преследуешь, делая форму неактивной. И чем не угодила вторая невидимая форма. Ее не видно, она ничему не мешает. Ее вообще можно вынести за пределы экрана. Она закроется с закрытием приложения,...
0
6 / 4 / 0
Регистрация: 21.06.2024
Сообщений: 9
22.09.2024, 17:35  [ТС]
Hell666, Я уже понял,что из задуманного мной ничего не выйдет.Заинтересовался тем же вопросом что и Тим70 Как имитировать нажатие клавиш Ctrl+C ,но похоже чтобы сделать Ctrl+c ,нужно чтобы фокус был на том от куда копируешь,а вот как это сделать даже не представляю.Наверное можно как то через Hwnd,но опять же,как его получить??? Вобщем тупик.
0
148 / 70 / 12
Регистрация: 11.02.2017
Сообщений: 310
22.09.2024, 17:46
Dimon1, Вобщем-то скорее всего наверное может быть можно.)))) Но нужно получить не только дескриптор окна приложения (блокнота), но и как-то подобраться к текстовому полю блокнота из которого копировать. Но и этого мало. Надо как-то в нем (текстовом поле блокнота) еще и выделить что копировать. Я как-то пытался разобраться и плюнул. Не стоит овчинка выделки. Удачи.)))
1
Любитель
 Аватар для Тим70
1023 / 722 / 158
Регистрация: 27.01.2019
Сообщений: 1,483
22.09.2024, 18:58
Цитата Сообщение от Dimon1 Посмотреть сообщение
Вобщем тупик.
Цитата Сообщение от Hell666 Посмотреть сообщение
Не стоит овчинка выделки.
Вот и я также подумал.
1
148 / 70 / 12
Регистрация: 11.02.2017
Сообщений: 310
22.09.2024, 20:36
Dimon1, Но это только что касается блокнота. Там фокус нечему принимать окромя как полю редактирования. А если какой вордпад или ворд и с фокусом на какойнить кнопке "Жопа", то она самая и будет.
VB.NET Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Imports System.Runtime.InteropServices
 
Public Class Form2
    <DllImport("USER32.DLL", CharSet:=CharSet.Unicode)>
    Public Shared Function FindWindow(lpClassName As String, lpWindowName As String) As IntPtr
    End Function
 
    <DllImport("USER32.DLL")>
    Public Shared Function SetForegroundWindow(hWnd As IntPtr) As Boolean
    End Function
    
   Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        Dim proc = Process.GetProcessesByName("notepad")
        For Each CurrentProcess In proc
            If CurrentProcess.MainWindowTitle.Contains("Блокнот") Then
                Dim handle = FindWindow(Nothing, CurrentProcess.MainWindowTitle)
                If handle = IntPtr.Zero Then
                    Return
                End If
                SetForegroundWindow(handle)
            End If
        Next
        SendKeys.Send("^a")
        SendKeys.Send("^c")
        TextBox1.Focus()
        SendKeys.Send("^v")
    End Sub
End Class
0
148 / 70 / 12
Регистрация: 11.02.2017
Сообщений: 310
22.09.2024, 21:04
Dimon1, Сорри. Подправленный код.
VB.NET Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Imports System.Runtime.InteropServices
 
Public Class Form2
    <DllImport("USER32.DLL", CharSet:=CharSet.Unicode)>
    Public Shared Function FindWindow(lpClassName As String, lpWindowName As String) As IntPtr
    End Function
 
    <DllImport("USER32.DLL")>
    Public Shared Function SetForegroundWindow(hWnd As IntPtr) As Boolean
    End Function
    
    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        TextBox1.Text = ""
        Dim proc = Process.GetProcessesByName("notepad")
        For Each CurrentProcess In proc
            If CurrentProcess.MainWindowTitle.Contains("Блокнот") Then
                Dim handle = FindWindow(Nothing, CurrentProcess.MainWindowTitle)
                If handle = IntPtr.Zero Then
                    Return
                End If
                SetForegroundWindow(handle)
            End If
        Next
        My.Computer.Keyboard.SendKeys("^a", True)
        My.Computer.Keyboard.SendKeys("^c")
        TextBox1.Focus()
        My.Computer.Keyboard.SendKeys("^v", True)
    End Sub
End Class
Миниатюры
Снять фокус с формы  
1
6 / 4 / 0
Регистрация: 21.06.2024
Сообщений: 9
23.09.2024, 08:16  [ТС]
Буду разбираться.Но меня больше интересует не блокнот,а сайты,копировать чаще всего приходится с них.
0
148 / 70 / 12
Регистрация: 11.02.2017
Сообщений: 310
23.09.2024, 08:28
Dimon1, Упс. А с сайтами вообще все просто.
WebView2 DOM
1
148 / 70 / 12
Регистрация: 11.02.2017
Сообщений: 310
23.09.2024, 08:38
Dimon1, Простенький пример. Сам юзаю.
Миниатюры
Снять фокус с формы  
1
2231 / 1552 / 393
Регистрация: 26.06.2017
Сообщений: 4,521
Записей в блоге: 1
23.09.2024, 10:11
На некоторых сайтах на страницах блокируются операции копирования в буфер.
Меня вот терзает вопрос: а чем обычный копипаст не угодил? Или задача как раз копировать заблокированный текст?
0
148 / 70 / 12
Регистрация: 11.02.2017
Сообщений: 310
23.09.2024, 10:30
Dimon1, Никакого копипаста. "Против лома нет приема, если нет другого лома"
VB.NET Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
Imports Microsoft.Web.WebView2.Core
Imports WebView2.DevTools.Dom
Public Class Form1
    Dim WithEvents coreWebView2New As CoreWebView2
    Dim WithEvents WV1 As Microsoft.Web.WebView2.WinForms.WebView2
    Dim devtoolsContext As WebView2DevToolsContext
    Sub New()
        InitializeComponent()
    End Sub
    Private Async Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        Try
            devtoolsContext = Await setOption()
            Exit Try
        Catch ex As Exception
            Label1.Text = ex.Message
        Finally
        End Try
    End Sub
    Async Function setOption() As Task(Of WebView2DevToolsContext)
        If devtoolsContext IsNot Nothing Then
            Await devtoolsContext.DisposeAsync
        End If
        If WV1 IsNot Nothing Then
            WV1.Dispose()
            Controls.Remove(WV1)
        End If
        WV1 = New Microsoft.Web.WebView2.WinForms.WebView2 With {
            .Location = New Point(0, 0),
            .Size = New Point(752, 316),
            .ZoomFactor = 0.9,
            .Visible = False
                        }
        Controls.Add(WV1)
        'Dim Options As CoreWebView2EnvironmentOptions = Nothing
        'Options = New CoreWebView2EnvironmentOptions With {
        '    .AdditionalBrowserArguments = "--no-proxy-server"
        '}
        'Dim env = Await CoreWebView2Environment.CreateAsync(Nothing, Nothing, Options)
        Await WV1.EnsureCoreWebView2Async()
        coreWebView2New = WV1.CoreWebView2
        RemoveHandler WV1.CoreWebView2.NewWindowRequested, AddressOf CoreWebView2_NewWindowRequested
        AddHandler WV1.CoreWebView2.NewWindowRequested, AddressOf CoreWebView2_NewWindowRequested
        WV1.CoreWebView2.Navigate("https://ya.ru/")
        Return Await WV1.CoreWebView2.CreateDevToolsContextAsync()
    End Function
    Private Sub CoreWebView2_NewWindowRequested(ByVal sender As Object, ByVal e As Microsoft.Web.WebView2.Core.CoreWebView2NewWindowRequestedEventArgs)
        Try
            e.Handled = True
            Exit Try
        Catch ex As Exception
            Label1.Text = ex.Message
        Finally
        End Try
    End Sub
    Private Async Sub coreWebView2New_DOMContentLoaded(sender As Object, e As CoreWebView2DOMContentLoadedEventArgs) Handles coreWebView2New.DOMContentLoaded
        Try
            If devtoolsContext Is Nothing Then
                devtoolsContext = Await setOption()
            End If
            If devtoolsContext.Url = "https://ya.ru/" Then
                'какойто код
            End If
            WV1.Visible = True
            Exit Try
        Catch ex As Exception
            Label1.Text = ex.Message
        Finally
        End Try
    End Sub
    Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Try
            Dim inputCheck = Await devtoolsContext.QuerySelectorAsync(Of HtmlInputElement)("#text")
            Await inputCheck.SetValueAsync(TextBox1.Text)
            Dim elements = Await devtoolsContext.QuerySelectorAllAsync(Of HtmlButtonElement)("button")
            For Each elem In elements
                If Await elem.GetClassNameAsync = "search3__button mini-suggest__button" Then
                    Await elem.InvokeClickAsync
                End If
            Next
        Catch ex As Exception
            Label1.Text = ex.Message
        Finally
        End Try
    End Sub
 
    Private Async Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Dim elements = Await devtoolsContext.QuerySelectorAllAsync(Of HtmlElement)("a")
        For Each elem In elements
            If Await elem.GetClassNameAsync = "home-link2 informers3__stocks-item home-link2_color_quaternary home-link2_hover_tertiary" Then
                Await elem.RemoveAsync
            End If
        Next
    End Sub
 
    Private Async Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        Dim elements = Await devtoolsContext.QuerySelectorAllAsync(Of HtmlElement)("a")
        Dim lst As New List(Of String)
        For Each elem In elements
            If Await elem.GetClassNameAsync = "home-link2 informers3__stocks-item home-link2_color_quaternary home-link2_hover_tertiary" Then
                lst.Add(Await elem.GetInnerTextAsync)
            End If
        Next
        Label2.Text = lst(0)
        Label3.Text = lst(1)
        Label4.Text = lst(2)
    End Sub
End Class
Миниатюры
Снять фокус с формы  
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.09.2024, 10:30
Помогаю со студенческими работами здесь

Как передать фокус TextBox при загрузке формы
В FormLoad ставлю TextBox.Focus() и... результата нет. Или я что-то попутал?

Снять фокус с Combobox
Есть combobox и richtextbox, combobox содержит коллекцию шрифтов, надо чтобы при выборе шрифта фокус переходил в richtextbox.

Нужно снять фокус с кнопки
Одна из кнопок почему-то сразу после запуска программы в фокусе и фрагмент кода: switch (e.KeyChar) { ...

Снять фокус с Combobox и перенести на Textbox
Здравствуйте! Подскажите как Снять фокус с Combobox и перенести на Textbox? Открываю список DroppedDown. Выбираю элемент. ...

Как программно снять фокус с кнопки
В общем создал фейк-объект и передаю ему фокус, но может есть какие-то нормальные способы?..


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

Новые блоги и статьи
TypeScript: Интерфейсы vs Типы
run.dev 11.04.2025
Современная разработка на JavaScript сталкивается с множеством проблем при масштабировании проектов. Типизация кода стала хорошим инструментом, помогающим избежать ошибок во время выполнения,. . .
Управление топиками и разделами Kafka
Javaican 11.04.2025
Apache Kafka — распределенная платформа потоковой передачи данных, которая стала стандартом для построения высоконагруженных систем обмена сообщениями. В современной архитектуре микросервисов,. . .
Миграция монолита в Event-Driven микросервисную архитектуру на C#
stackOverflow 11.04.2025
Монолитная архитектура – классический подход к разработке программного обеспечения. Это приложение, построенное как единое целое, где все компоненты тесно связаны между собой. Большинство проектов. . .
Go в Kubernetes: Управление ресурсами
golander 11.04.2025
Разработчики Go-приложений в Kubernetes часто сталкиваются с неожиданными проблемами производительности и даже внезапными отказами контейнеров. Причина этого кроется в особенностях взаимодействия. . .
Агрегаты и сущности в DDD микросервисах
Javaican 10.04.2025
Разработка современных программных систем часто приводит на распутье: монолит или микросервисы? Даже при выборе микросервисной архитектуры многие команды сталкиваются с проблемой правильного. . .
Многопоточность в C#: Task и параллельное программирование
UnmanagedCoder 10.04.2025
Современные процессоры уже давно перестали наращивать тактовую частоту в пользу увеличения количества ядер. Это создало интересную ситуацию: разработчики, привыкшие к последовательному. . .
Линейное решение нелинейной задачи с помощью арктангенса для метода обработки данных из double buffering.
Hrethgir 10.04.2025
Публикация в доработке, метод арктангенса в комментариях внизу. Вообще изначально я пренебрёг квадратурой числа, но потом понял, что для вычисления приблизительного значения - сгодится, формулу. . .
Переменные в Python
py-thonny 10.04.2025
Переменная в программировании — это символическое имя, связанное с областью памяти, в которой хранится значение. Она позволяет получать доступ к данным через понятные человеку идентификаторы, а не. . .
Многопоточность в C#: Task и асинхронные операции
UnmanagedCoder 10.04.2025
Многопоточность позволяет выполнять несколько операций одновременно, что важно для решения двух основных задач: повышения скорости выполнения вычислительно-сложных операций и сохранения отзывчивости. . .
Запуск контейнеров Docker на ARM64
Mr. Docker 09.04.2025
Появление таких решений, как Apple M1/ M2, AWS Graviton, Ampere Altra и Raspberry Pi, сделало использование ARM-систем обыденностью для многих разработчиков и DevOps-инженеров. При этом Docker,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер