Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
6 / 4 / 0
Регистрация: 21.06.2024
Сообщений: 9

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

15.09.2024, 15:12. Показов 1454. Ответов 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
Сообщений: 301
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
2228 / 1549 / 393
Регистрация: 26.06.2017
Сообщений: 4,497
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Результаты исследования от команды MCM (март 2025 г.)
Programma_Boinc 07.04.2025
Результаты исследования от команды MCM (март 2025 г. ) В рамках наших текущих исследований мы продолжаем изучать гены, которые имеют наибольшую вероятность развития рака легких, выявленные в рамках. . .
Рекурсивные типы в Python
py-thonny 07.04.2025
Рекурсивные типы - это типы данных, которые определяются через самих себя или в сочетании с другими типами, которые в свою очередь ссылаются на исходный тип. В мире программирования такие структуры. . .
C++26: Объединение и конкатенация последовательностей и диапазонов в std::ranges
NullReferenced 07.04.2025
Работа с последовательностями данных – одна из фундаментальных задач, с которой сталкивается каждый разработчик. C++ прошел длинный путь в эволюции средств для манипуляции коллекциями – от. . .
Обмен данными в микросервисной архитектуре
ArchitectMsa 06.04.2025
Когда разработчики начинают погружаться в мир микросервисов, они часто сталкиваются с парадоксальным правилом: "два сервиса не должны делить один источник данных". Эта мантра звучит повсюду в. . .
PostgreSQL в Kubernetes: Автоматизация обслуживания с CNPG
Mr. Docker 06.04.2025
Администраторы баз данных сталкиваются с целым рядом проблем при обслуживании PostgreSQL в Kubernetes: как обеспечить правильную репликацию данных, как настроить автоматическое переключение при. . .
Async/await в TypeScript
run.dev 06.04.2025
Асинхронное программирование — это подход к разработке программного обеспечения, при котором операции выполняются независимо друг от друга. В отличие от синхронного выполнения, где каждая последующая. . .
Многопоточность в C#: Синхронизация потоков
UnmanagedCoder 06.04.2025
Многопоточное программирование стало неотъемлемой частью разработки современных приложений на C#. С появлением многоядерных процессоров возможность выполнять несколько задач параллельно значительно. . .
TypeScript: Классы и конструкторы
run.dev 06.04.2025
TypeScript, как статически типизированный язык, построенный на основе JavaScript, привнес в веб-разработку новый уровень надежности и структурированности кода. Одним из важнейших элементов этой. . .
Многопоточное программирование: Rust против C++
golander 06.04.2025
C++ существует уже несколько десятилетий и его поддержка параллелизма постепенно наращивалась со временем. Начиная с C++11, язык получил стандартную библиотеку для работы с потоками, а в последующих. . .
std::vector в C++: от основ к оптимизации производительности
NullReferenced 05.04.2025
Для многих программистов знакомство с std::vector происходит на ранних этапах изучения языка, но между базовым пониманием и подлинным мастерством лежит огромная дистанция. Контейнер std::vector. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер