winForm 激活在最前面???急~~~~~

topninaru000 2010-06-22 07:09:35
本人想实现以下的功能.

Public Class Class1

Public Shared Sub Main(ByVal aaa() As String)

Dim asdasdas As New form1

Dim ObjMyProcess As Process()

ObjMyProcess = Process.GetProcessesByName(Process.GetCurrentProcess.ProcessName)

'问了防止二重启动
If ObjMyProcess.Length > 1 Then
'第二次开始想显示在最前面.....
asdasdas.Show()

Return
End

End If
Dim frm As New Form1

Application.Run(frm)

End Sub
End Class



大家可以这么实验, 再加一个form,然后单击exe,最小化之后,再单击exe,想让form显示....

请指教...

提示:不要设置 topmost属性(不是显示在最前面,而是激活当前form)
...全文
539 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
topninaru000 2010-06-22
  • 打赏
  • 举报
回复
怎么没人会吗?
topninaru000 2010-06-22
  • 打赏
  • 举报
回复
还是不行啊。。求助。。。
悔说话的哑巴 2010-06-22
  • 打赏
  • 举报
回复
http://msdn.microsoft.com/zh-cn/library/system.windows.forms.form.windowstate(VS.80).aspx
看看最基本的吧
悔说话的哑巴 2010-06-22
  • 打赏
  • 举报
回复
就是使用WindowState 属性问题
topninaru000 2010-06-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wm_jawin 的回复:]
你要重写form.WndProc(好像是这个名子).然后在启动mian检测是否已经启动了一个实例,如果是,就用API:SendMessage()发送自定义广播消息,然后退出。已经启动的form,收到广播消息之后,就是把自己激啦
[/Quote]


详细说明好吗? 最好带点例子。。。
topninaru000 2010-06-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hellosm 的回复:]
引用 1 楼 topninaru000 的回复:
补充:按照我现在代码的话,第二次单击exe的时候,form闪一下之后,最小化了...

那就在show窗体后面加
asdasdas.WindowState = FormWindowState.Normal;
[/Quote]


这个行不通。。。试一下看看把。。。闪一下后,自动最小化了。。

回复二楼:form1和Form1是一个窗体。。。笔误。。。
cjnkd 2010-06-22
  • 打赏
  • 举报
回复
form 的激活属性设为真
qinweiqw84 2010-06-22
  • 打赏
  • 举报
回复
你要将form 的WindowState 属性改回去才可以地
zhanggd614 2010-06-22
  • 打赏
  • 举报
回复
要是不用消息就判断状态
否则 api用消息比较好
WM_JAWIN 2010-06-22
  • 打赏
  • 举报
回复
你要重写form.WndProc(好像是这个名子).然后在启动mian检测是否已经启动了一个实例,如果是,就用API:SendMessage()发送自定义广播消息,然后退出。已经启动的form,收到广播消息之后,就是把自己激啦
flowerjack 2010-06-22
  • 打赏
  • 举报
回复
VB代码不怎么懂,只会c#。楼主是在调试状态下出现这种情况吗?一般都是在调试才会这样子
老Key 2010-06-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hellosm 的回复:]
引用 1 楼 topninaru000 的回复:
补充:按照我现在代码的话,第二次单击exe的时候,form闪一下之后,最小化了...

那就在show窗体后面加
asdasdas.WindowState = FormWindowState.Normal;
[/Quote]lz照着这个试试吧
hellosm 2010-06-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 topninaru000 的回复:]
补充:按照我现在代码的话,第二次单击exe的时候,form闪一下之后,最小化了...
[/Quote]
那就在show窗体后面加
asdasdas.WindowState = FormWindowState.Normal;
灵雨飘零 2010-06-22
  • 打赏
  • 举报
回复
up

zhanggd614 2010-06-22
  • 打赏
  • 举报
回复
根本没明白你的意思 form1和Form1 是两个窗体吗?
topninaru000 2010-06-22
  • 打赏
  • 举报
回复
补充:按照我现在代码的话,第二次单击exe的时候,form闪一下之后,最小化了...
topninaru000 2010-06-22
  • 打赏
  • 举报
回复
25楼 的正确。。。谢谢。。。结贴了。。
兔子-顾问 2010-06-22
  • 打赏
  • 举报
回复
Public Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As IntPtr) As Integer
Public Shared Sub Main(ByVal aaa() As String)

Dim p As Process() = Process.GetProcessesByName(Process.GetCurrentProcess.ProcessName) 'Process.GetCurrentProcess.ProcessName)
'防止程序启动多次,只有一个运行的实例
If p.Length > 1 Then
'将之前启动的窗体显示出来。
SetForegroundWindow(p(0).MainWindowHandle)
End '退出软件
End If
'正常情况下的窗体显示
Application.Run(New Form1())
End Sub


进程名忘记修改回来了。测试有效。
兔子-顾问 2010-06-22
  • 打赏
  • 举报
回复
如果是希望吧之前窗体显示出来。

Public Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As IntPtr) As Integer
Public Shared Sub Main(ByVal aaa() As String)

Dim p As Process() = Process.GetProcessesByName("VBWin02") 'Process.GetCurrentProcess.ProcessName)
'防止程序启动多次,只有一个运行的实例
If p.Length > 1 Then
'将之前启动的窗体显示出来。
SetForegroundWindow(p(0).MainWindowHandle)
End '退出软件
End If
'正常情况下的窗体显示
Application.Run(New Form1())
End Sub
maxwellno1 2010-06-22
  • 打赏
  • 举报
回复
Public Shared Sub Main(ByVal aaa() As String)

Dim asdasdas As New Form1

Dim ObjMyProcess As Process()

ObjMyProcess = Process.GetProcessesByName(Process.GetCurrentProcess.ProcessName)

'问了防止二重启动
If ObjMyProcess.Length > 1 Then
'第二次开始想显示在最前面.....
Application.Run(asdasdas)
Return


'找到已启动的窗体句柄 然后将其显示出来
'
'code
'

'同时将这个程序关闭
Application.Exit()
'End

End If
Dim frm As New Form1

Application.Run(frm)

End Sub


差不多应该是这样
加载更多回复(6)

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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