2016-09-05 3 views
0

Form1 моего App является Войти страница, что я хочу:
- показать на некоторых условиях
- скрыть и показать Form2 на некоторых условияхСкрыть Form1, показать Form2 на Form1_Load

Я могу скрыть/показать форма по событию нажатия кнопки, как это так,

private void button1_Click(object sender, EventArgs e) 
    { 
     Form2 f2= new Form2(); 
     f2.Show(); 
     this.Hide(); 
    } 

но тот же метод не работает для Form1_Load.

Я попробовал первый пример в this thread,

Program.cs

static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.Run(); 
    } 

Form1

private void Form1_Load(object sender, EventArgs e) 
    { 

     Form2 f2= new Form2(); 
     f2.Show(); 
     this.Hide(); 
    } 

но не показывает ни Form1 Form2 или, и я не вижу, как это c Уальд. Во втором примере я не могу понять, как я могу реализовать, а следующие результаты Google еще более запутывают.
Пожалуйста, помогите, я застрял на этом в течение 2 часов.

+0

Это должно быть: 'Application.Run (new Form1());' in program.cs – Stefan

+0

Это по умолчанию. Но выполнение 'this.Hide()' в Form1_Load не скрывает Form1. –

+0

Ваша программа должна создавать и загружать 'Form1'. По умолчанию или нет; вам понадобится «новая форма1» и «показать» где-нибудь. 'Application.Run' обычно обрабатывает это правильно. Альтернативой является создание 'Form1' в вашей основной функции. Помните, что '.Show' является неблокирующим вызовом, и ваше приложение выйдет, если вы не справитесь с этим. – Stefan

ответ

3

В последней строке в program.cs вы должны ввести new Form1() между скобкой. Таким образом, ваш код program.cs выглядит следующим образом:

static void Main() 
{ 
    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 
    Application.Run(new Form1()); 
} 

C# не может скрыть форму в form_load evant Видимо. Чтобы решить проблему скрыть, вы можете использовать таймер и скрыть форму в событии tick. то есть:

Timer timer = new Timer(); 

private void timerTick(object sender, EventArgs e) 
{ 
    timer.Enabled = false; 
    this.Hide(); 
} 

private void Form1_Load(object sender, EventArgs e) 
{ 
    timer.Tick += new EventHandler(timerTick); 
    timer.Interval = 10; 
    Form2 frm = new Form2(); 
    frm.Show(); 
    timer.Enabled = true; 
} 

Это работает. Я протестировал его.

Надеюсь, это будет полезно.

+0

Я знаю, что вы говорите, но это не устраняет мою проблему. –

+0

@Cris: поскольку это может не решить вашу проблему немедленно, эту проблему также необходимо решить. – Stefan

+0

Я отредактировал мое решение. Думаю, все будет хорошо. –

0

Почему бы вам не изменить порядок своих форм? Начните с основной формы в основном методе.

Application.Run(new Form2()); 

Теперь в конструкторе Form2 называют регистрационную форму с ShowDialog и установить результат входа в глобальной переменной внутри Form2

public class Form2:Form 
{ 
    private bool _isValidated = false; 
    public Form2() 
    { 
     InitializeComponent(); 

     // Add here the conditions to check if you don't want to 
     // run the login process... 
     // if(loginNotRequired) 
     // _isValidated = true; 
     // else 

     using(Form1 fLogin = new Form1()) 
     { 
      // This blocks until the user clicks cancel or ok buttons 
      DialogResult dr = fLogin.ShowDialog(); 
      if(dr == DialogResult.OK) 
       _isValidated = true; 
     } 
    } 

Теперь в случае Form2.Load проверки состояния вашего логина и закройте Form2, если Логин не успешно

private void Form2_Load(object sender, EventArgs args) 
    { 
     if(!_isValidated) 
      this.Close(); 
     else 
      ..... 
    } 
0

Здравствуйте Вы можете использовать этот

private void button1_Click(object sender, EventArgs e) 
{ 
    Form2 f2= new Form2(); 
    if(condition==true) 
    { 
     this.Hide(); 
     f2.ShowDialog(); 
     this.Close(); 
    } 
} 
Смежные вопросы