2012-12-27 2 views
2

내가 시도 :양식에 초점을 맞출 수 없습니까?

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

이 코드는 전면에 제공합니다,하지만 난 여전히 초점을 할 양식 클릭해야 어떤 이유로, 사람이 왜 나를 알 수 있습니까?

+0

myForm 정의 방법을 보여줄 수 있습니까? 에드? –

+0

방금 ​​업데이트했습니다 – Oztaco

+0

왜 최소화 되었습니까? 아마도 http://stackoverflow.com/questions/4849888/how-can-i-bring-a-minimized-modeless-winform-to-its-previously-displayed-positio와 같은 문제가 발생할 것입니다. – holtavolt

답변

1

안녕하세요 leaf68 그냥 ​​내 코드를 따릅니다. 응용 프로그램의 주 진입 점> - 그것을 알아낼하려고 :)

하자 우리가 Program라는 Static Class이 우리가 우리의 프로젝트에서

MainFormLoginForm을 말한다.은 기본 클래스로 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; 
    } 
} 

다음이 우리 성공적으로 Login으로 MainForm 그래서 이것이 우리 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(); 
    } 
} 

가 당신을 도와줍니다 :)

을 것을
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); 
      } 
     } 
    } 

다음 가정 우리의 LoginForm 코드입니다
+0

감사합니다. 이것은 내가 찾고있는 것보다 훨씬 좋습니다. – Oztaco

0

양식이 보이지 않으므로 트레이 아이콘 만 있습니다.

난 그냥 사용

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

을 위 위해. 프로그램이 앞에오고 활성화됩니다. 즉 입력이 실제로 활성 필드에 쓰는 것을 의미합니다.

이 작동 :

프로그램이 자동으로 나타납니다
  • 와 사용자가 트레이 메뉴 항목을 선택
  • .
+0

내가 집중하려고하는 양식 on은 내 기본 양식의 하위 항목이며 최소화해야합니다. – Oztaco

+2

그건 불가능합니다. 그것이 실제로 자식 창 (어떻게 하나가 되었습니까?) 부모를 최소화하는 것은 자식을 사라지게 만들 것입니다. –

+0

내가 잘못 말했던 것 같아요. 아이가 내 기본 양식을 소유하고 있다는 것을 의미합니다. 왜냐하면 내가 주력하려고하는 양식이 내 기본 양식이 될 때 최소화되지 않기 때문입니다. – Oztaco

2

양식이 이미 집중되어있을 수 있습니다. 대신 텍스트 상자 또는 콤보와 같은 컨트롤을 선택해야 할 수도 있습니다.

나는 폼의 Load 메서드에서이 코드를 사용합니다 :

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