2012-12-27 22 views
2

我想:無法聚焦()到表單上?

Form myForm = new EULA(); 
myForm.Show(); 
this.WindowState = FormWindowState.Minimized; 
myForm.BringToFront(); 
myForm.Activate(); 
myForm.Focus(); 

此代碼它放到前面,但由於某些原因,我還是要在表上點擊它有焦點,誰能告訴我爲什麼?

+0

你能說明myForm是如何定義的嗎? ED? –

+0

剛更新了它 – Oztaco

+0

爲什麼要最小化?可能你遇到了同樣的問題http://stackoverflow.com/questions/4849888/how-can-i-bring-a-minimized-modeless-winform-to-its-previously-displayed-positio – holtavolt

回答

1

嗨leaf68只要按照我的代碼。揣摩了:)

讓我們說我們有MainFormLoginForm

在我們的項目,我們有一個Static Class我們叫Program - >的主入口點的應用程序。作爲我們項目的run的默認類。

static class Program 
{ 
    /// <summary> 
    /// The main entry point for the application. 
    /// </summary> 
    [STAThread] 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 

     Application.Run(new LoginForm()); 

     if (LoginForm._loginSuccess) 
     { 
      var m = new MainForm(); 
      Application.Run(m); 
     } 
     else 
      Application.Exit(); 
    } 

    public static bool UserLogin() //Add some parameter 
    { 
     //You Logic here 
     LoginForm._loginSuccess = true; 
     return LoginForm._loginSuccess; 
    } 
} 

那麼這是我們LoginForm

public partial class LoginForm : Form 
    { 
     public LoginForm() 
     { 
      InitializeComponent(); 
     } 

     public static bool _loginSuccess { get; set; } 
     public event EventHandler Login; 

     private void loginButton_Click(object sender, EventArgs e) 
     { 
      if (Program.UserLogin()) 
      { 
       Close(); 
       Dispose(); 

       if (Application.OpenForms.Count > 0) 
        if (Application.OpenForms["MainForm"].Name == "MainForm") 
        { 
         Application.OpenForms["MainForm"].WindowState = FormWindowState.Normal; 
         Application.OpenForms["MainForm"].Enabled = true; 
        } 
       if (Login != null) 
        Login(this, EventArgs.Empty); 
      } 
     } 
    } 

那麼假設我們成功LoginMainForm所以這是我們MainForm

public partial class MainForm : Form 
{ 
    public MainForm() 
    { 
     InitializeComponent(); 
    } 

    private void logOutButton_Click(object sender, EventArgs e) 
    { 
     //Hide(); 
     Enabled = false; 
     WindowState = FormWindowState.Minimized; 
     var f = new LoginForm(); 
     f.Login += loginShow; 
     f.Show(); 
     f.Activate(); 
    } 

    private void loginShow(object sender, EventArgs args) 
    { 
     Show(); 
    } 
} 

我希望它能幫助你:)

+0

謝謝,這比我想要的還要好 – Oztaco

0

我有一個窗體不可見,所以只有托盤圖標。

我只是用:

this.ShowInTaskbar = true; 
this.WindowState = FormWindowState.Normal; 
this.Activate(); 

在上面的命令。程序來到前面並且被激活,這意味着打字實際上在活動字段中寫入。

這工作:

  • 時,程序會自動出現,當用戶選擇托盤菜單項
+0

我正在嘗試關注的表單上是我的主要形式的孩子,我需要儘量減少。 – Oztaco

+2

這是不可能的。如果它實際上是一個孩子窗口(它是如何成爲一個窗口的?),那麼最小化父母會讓孩子也消失。 –

+0

我想我說錯了,小孩我的意思是它屬於我的主要形式,因爲當我的主要形式是我試圖關注的形式不是最小化。 – Oztaco

2

表單可能已經集中,也許你想要一個內部的控件(如文本框或組合)來選擇呢?

我會在窗體的加載方法使用此代碼:

private void Form_Load(object sender, System.EventArgs e) 
{ 
    controlName.Select(); 
}