本人想实现以下的功能.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)

解决方案 »

  1.   

    补充:按照我现在代码的话,第二次单击exe的时候,form闪一下之后,最小化了...
      

  2.   

    根本没明白你的意思   form1和Form1 是两个窗体吗?
      

  3.   

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

  4.   

    VB代码不怎么懂,只会c#。楼主是在调试状态下出现这种情况吗?一般都是在调试才会这样子
      

  5.   

    你要重写form.WndProc(好像是这个名子).然后在启动mian检测是否已经启动了一个实例,如果是,就用API:SendMessage()发送自定义广播消息,然后退出。已经启动的form,收到广播消息之后,就是把自己激啦
      

  6.   

    要是不用消息就判断状态
    否则 api用消息比较好 
      

  7.   

     你要将form  的WindowState 属性改回去才可以地
      

  8.   

    这个行不通试一下看看把闪一下后,自动最小化了。。回复二楼:form1和Form1是一个窗体笔误
      

  9.   

    就是使用WindowState 属性问题
      

  10.   

    http://msdn.microsoft.com/zh-cn/library/system.windows.forms.form.windowstate(VS.80).aspx
    看看最基本的吧
      

  11.   

    设置窗体的WindowState属性不就行了,不要new一个新的
      

  12.   

    想法,有点偏,应该是检测到同名进程。就退出当前的。激活之前打开的窗体。激活可以调用api
    Public Declare Function SetForegroundWindow Lib "user32" Alias "SetForegroundWindow" (ByVal hwnd As Integer) As Integer
      

  13.   

    没太明白。你是同一个程序,启动2次,后一次启动的想放在前面?    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
                End        End If
            Dim frm As New Form1        Application.Run(frm)    End Sub
      

  14.   


    楼上正解楼主可以调用FindWindowsEx api(好象是叫这个名字) 找到程序窗体的句柄 然后有了句柄 楼主爱怎样就怎样了
      

  15.   

    新打开窗体时 先将topmost设为true 马上又设为false
      

  16.   

    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
    差不多应该是这样
      

  17.   

    如果是希望吧之前窗体显示出来。    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
      

  18.   

    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进程名忘记修改回来了。测试有效。