Form1 моего приложения - это страница входа, которую я хочу:
- показать на некоторых условиях
- скрыть и показать Form2 при некоторых условиях

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

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

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

Я пробовал первый пример в этой теме,

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, и я не понимаю, как это могло быть. Во втором примере я не могу понять, как я могу реализовать, а следующие результаты Google запутывают еще больше.
Пожалуйста, помогите, я застрял на этом на 2 часа.

0
Cristian Muscalu 5 Сен 2016 в 22:13

3 ответа

Лучший ответ

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

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

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

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;
 }

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

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

3
Morteza.M 5 Сен 2016 в 19:53

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

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;
         }
     }

Теперь в событии Form.Load проверьте статус вашего логина и закройте форму 2, логин не прошел

    private void Form2_Load(object sender, EventArgs args)
    {
         if(!_isValidated)
            this.Close();
         else
            .....
    }
0
Steve 5 Сен 2016 в 19:52

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

private void button1_Click(object sender, EventArgs e)
{
    Form2 f2= new Form2();
    if(condition==true)
    {
        this.Hide();
        f2.ShowDialog();
        this.Close();
    }
}
1
Little Sylvanas 5 Сен 2016 в 20:31