2016-08-27 14 views
-1

DialogResultを前面に表示する方法 以下は私のフォームです。私は他のすべてのアプリケーションを実行する前にそれを持っていきたい。 しかし、デバッグモードでは動作していますが、「デバッグモードなしで実行」では動作しません。DialogResult結果を前面に表示する方法

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Runtime.InteropServices; 

namespace XYZ 
{ 
    public partial class Form2 : Form 
    { 

     [return: MarshalAs(UnmanagedType.Bool)] 
     [DllImport("user32", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)] 
     public static extern bool SetForegroundWindow(IntPtr hwnd); 

     public Form2() 
     { 
      InitializeComponent(); 

     } 
     static Form2 MsgBox; static DialogResult result = DialogResult.No; 
     public static DialogResult Show(/*string Text, string Caption, string btnOK, string btnCancel */) 
     { 
       MsgBox = new Form2(); 
       MsgBox.FormBorderStyle = FormBorderStyle.None; 
       result = DialogResult.No; 
       MsgBox.TopMost = true; 


       try 
       { 
        SetForegroundWindow(MsgBox.Handle); 
        System.Media.SystemSounds.Beep.Play(); 
        MsgBox.TopLevel = true; 
        MsgBox.ShowDialog(MsgBox.ParentForm); 

       } 
       catch (Exception ex) 
       { 

        LogHelper.WriteFatalLog("Show", ex); 
       } 
       return result; 

     } 


     private void Form2_Load(object sender, EventArgs e) 
     { 

     } 

     private void btnLoginF2_Click(object sender, EventArgs e) 
     { 
      Program.username = txtUserNameBtn.Text; 
      Program.password = txtPassBtn.Text; 


      result = DialogResult.Yes; MsgBox.Close(); 
     } 
    } 
} 

hereに語ったように私は

   try 
       { 
        Util.TaskHide(0); 
        Util.KillCtrlAltDelete(); 
        Util.KillTaskManager(); 
        // ShowWindow(hwnd,0); 
       } 
       catch (Exception ex) 
       { 

       // MessageBox.Show(ex.Message); 
        LogHelper.WriteErrorLog("Hide Kill Manage", ex); 
       } 
       Form2.Show(); 
       // Program.mfLogin.Hide(); 
       try 
       { 
        Util.TaskHide(1); 
        Util.EnableCTRLALTDEL(); 

       } 
       catch (Exception ex2) 
       { 

        MessageBox.Show(ex2.Message); 
        LogHelper.WriteErrorLog("Show Pamper Leave", ex2); 
       } 
+0

ストップシステムをハックしようと道必要以上に複雑さも適切にオブジェクトを配置していないような悪いコードを書く...一般 – Phil1970

+0

は、置くことは悪いデザインです他のアプリケーションの前にあるフォーム。システムとユーザーを尊重しないアプリケーションは作成しないでください。 – Phil1970

+0

チルブロ、それはクライアントの要求です。 –

答えて

2

使用フォームのActivate()方法以下のように実行しています。

備考欄には、 アクティブなアプリケーションの場合は、フォームをアクティブにすると前面に表示されます。ホープことができます

関連する問題