求一段代码,【窗体无焦点置顶】的代码

eaqpi 2011-05-16 11:51:27
求 窗体无焦点置顶的 方法,VS2010

A窗体按键弹出B窗体。B窗体置顶,A窗体依旧可以操作,B窗体不获得焦点。点击B窗体,B窗体响应,但焦点依旧交还给A窗体。

例如:A窗体上有text框,我在text框中输入文字,B窗体根据text的文字变化而出现不同的选择项,当点击b窗体的选项,A窗体的文字框文字显示B窗体的选择项。单A窗体的text框不丢焦点。(只是说明作用,不用那么多代码)

求 能实现以上例子的 窗体无焦点置顶的方式.
...全文
189 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
eaqpi 2011-05-17
  • 打赏
  • 举报
回复
有没有高手帮忙啊。。
eaqpi 2011-05-16
  • 打赏
  • 举报
回复
需要无焦点,在操作的时候也是 前一个窗体不丢焦点。
gxingmin 2011-05-16
  • 打赏
  • 举报
回复
如果想置顶的窗体显示后无焦点,需要加上这句
me.Activate()


dim frm as new Form2()
frm.TopMost = true '加上这句,置顶的
frm.Show()
me.Activate()
gxingmin 2011-05-16
  • 打赏
  • 举报
回复
 dim frm as new Form2()
frm.TopMost = true '加上这句,置顶的
frm.Show()
eaqpi 2011-05-16
  • 打赏
  • 举报
回复
修正form2代码

Imports System.Runtime.InteropServices
Public Class Form2
Dim hWnd As IntPtr
Const GWL_EXSTYLE As Integer = -20
Const WS_EX_NOACTIVATE As Int32 = 134217728 '0x08000000
Const WS_EX_APPWINDOW As Int32 = 134217729 '0x08000001

<DllImport("User32.dll", EnTryPoint:="SetWindowLong")> _
Public Shared Function SetWindowLong(ByVal hWnd As IntPtr, ByVal nIndex As Integer, ByVal dwNewLong As Int32) As Int32
End Function

<DllImport("User32.dll", EnTryPoint:="GetWindowLong")> _
Public Shared Function GetWindowLong(ByVal hWnd As IntPtr, ByVal nIndex As Integer) As Int32
End Function


<DllImport("USER32.DLL")> _
Public Shared Function SetForegroundWindow(ByVal hWnd As IntPtr) As Boolean
End Function

Public Sub New(ByVal hWnd As IntPtr)
Me.hWnd = hWnd
InitializeComponent()
End Sub


Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
SetWindowLong(Me.Handle, GWL_EXSTYLE, GetWindowLong(Me.Handle, GWL_EXSTYLE) + WS_EX_NOACTIVATE)
SetForegroundWindow(Me.hWnd)
End Sub
'2个按钮,1、退出 2、送键值 A
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.Close()
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
SendKeys.Send("A")
End Sub
End Class
threenewbee 2011-05-16
  • 打赏
  • 举报
回复
这么简单的问题。

在主窗口里这样打开子窗口:

Dim child As New ChildForm()
child.Show(Me)
eaqpi 2011-05-16
  • 打赏
  • 举报
回复
建立2个窗体,
A、1、放一个按键(button) 2、放一个文本框。
B、放2个按键(button)

form1中拷贝入代码

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
Dim fm As New Form2(Me.Handle)
fm.TopMost = True
fm.Show()
End Sub


form2中拷贝入代码
Imports System.Runtime.InteropServices
Public Class Form2
Dim hWnd As IntPtr
Const GWL_EXSTYLE As Integer = -20
Const WS_EX_NOACTIVATE As Int32 = 134217728 '0x08000000
Const WS_EX_APPWINDOW As Int32 = 134217729 '0x08000001

<DllImport("User32.dll", EnTryPoint:="SetWindowLong")> _
Public Shared Function SetWindowLong(ByVal hWnd As IntPtr, ByVal nIndex As Integer, ByVal dwNewLong As Int32) As Int32
End Function

<DllImport("User32.dll", EnTryPoint:="GetWindowLong")> _
Public Shared Function GetWindowLong(ByVal hWnd As IntPtr, ByVal nIndex As Integer) As Int32
End Function


<DllImport("USER32.DLL")> _
Public Shared Function SetForegroundWindow(ByVal hWnd As IntPtr) As Boolean
End Function

Public Sub New(ByVal hWnd As IntPtr)
Me.hWnd = hWnd
InitializeComponent()
End Sub


Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
SetWindowLong(Me.Handle, GWL_EXSTYLE, GetWindowLong(Me.Handle, GWL_EXSTYLE) + WS_EX_NOACTIVATE)
SetForegroundWindow(Me.hWnd)
End Sub
'2个按钮,1、退出 2、送键值 A
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
Me.Close()
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
SendKeys.Send("A")
End Sub
End Class


运行

发现一个问题,如果是外面的窗体,比如打开一个记事本等,可以完美的运行无焦点状态,点击button2送出键值A。
但是如果是创建他的 form1则不行,总是会让form2 获得焦点,为什么呢?求教。
资源下载链接为: https://pan.quark.cn/s/abbae039bf2a 在 Windows Forms (WinForm) 应用程序开发中,C# 语言凭借其强大的功能和丰富的控件库,为开发者提供了创建各种弹出框的便利。以“仿 QQ 新闻弹出框”为例,其核心功能主要包括以下几点: 渐进消失效果:弹出框在显示一段时间后,会逐渐变透明并最终自动关闭。这可以通过使用定时器(Timer)控件结合自定义动画逻辑来实现。开发者可以设置一个定时器,随着时间推移逐步降低弹出框的透明度,直到透明度为 0 时关闭窗口。 鼠标悬停保持显示:当鼠标指针移入弹出框时,弹出框会保持可见状态;当鼠标移出时,弹出框继续按照设定的时间逐渐消失。这一功能可以通过处理鼠标事件(如 MouseEnter 和 MouseLeave)来实现。鼠标进入弹出框时,暂停关闭计时器;鼠标离开时,重新启动计时器。 不获取焦点:弹出框出现时不会抢夺当前活动窗口的焦点,从而确保用户可以继续操作其他窗口。在 WinForm 中,可以通过将控件的 Focusable 属性设置为 false 来实现,同时保证其他窗口能够正常接收键盘输入。 始终置顶:弹出框始终位于所有其他窗口之上,无论用户如何切换窗口,它都能保持在最前端。这可以通过将窗口的 TopMost 属性设置为 true 来实现。 在实现过程中,开发者通常会创建一个继承自 System.Windows.Forms.Form 的自定义类,例如名为“frmTaskbar”的窗体类,用于实现任务栏通知区域的弹出效果。该类可以包含一个 PictureBox 用于显示消息内容,一个 Label 用于显示标题,以及一些按钮或链接用于提供交互。 要实现这样的功能,开发者需要熟悉 C# 语言、Windows Forms 编程以及 .NET Framework 的相关知识。同时,掌

16,722

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧