Я создал 2 формы в VS Studio 2008 Express Edition и объявил их как общедоступную статическую в основном файле program.cs
Я просто хочу переключиться между двумя формами с помощью ShowDialog и Close, но при попытке закрыть вторую форму и снова открыть первую форму с помощью showdialog, он говорит, что я не могу использовать showDialog, когда форма уже видна, тогда как это не так правда, так как я закрыл его, прежде чем показывать вторую форму.
Он попросил меня установить для свойства visible значение false до использования showdialog, поэтому я сделал это
internal static void CloseSecondForm(FirstForm FirstForm)
{
FirstForm .Close();
SecondForm.Visible = false;
SecondForm.ShowDialog();
}
Но тогда говорится, что я не могу использовать ShowDialog, потому что форма уже показана в режиме диалога, и я должен закрыть ее. Поэтому я сделал то, что он спросил
internal static void CloseSecondForm(FirstForm FirstForm)
{
FirstForm .Close();
SecondForm.Visible = false;
SecondForm.Close();
SecondForm.ShowDialog();
}
Но он все еще делает вид, что форма уже открыта с помощью ShowDialog!
Это ошибка в моей проге или в Winform?
Обновление: это весь код, который я опубликовал в 5-м ответе (я хочу использовать showdialog, а не показывать, потому что у меня может быть 3-я форма в фоновом режиме, к которой я не хочу, чтобы пользователь имел доступ):
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form1 = new Form1();
Form2 = new Form2();
Form1.ShowDialog();
Application.Run();
}
// called from Form1 BUTTON
internal static void ShowForm2(Form1 Form1)
{
Form1.Hide();
Form2.ShowDialog();
}
// called from Form2 BUTTON
internal static void ShowForm1(Form2 Form2)
{
Form2.Hide();
Form1.ShowDialog();
}
Я пытался использовать Hide, как это было предложено, но он тоже не работает. Это целая программа, то, что я хочу сделать, очень просто: у меня есть две формы, изначально созданные в программе, с одной кнопкой на каждой форме, чтобы закрыть себя и открыть другую. Я поместил всю логику в program.cs ниже:
using System;
using System.Windows.Forms;
namespace twoforms
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
///
public static Form1 Form1;
public static Form2 Form2;
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form1 = new Form1();
Form2 = new Form2();
Form1.ShowDialog();
Application.Run();
}
// called from Form1 BUTTON
internal static void ShowForm2(Form1 Form1)
{
Form1.Hide();
Form2.ShowDialog();
}
// called from Form2 BUTTON
internal static void ShowForm1(Form2 Form2)
{
Form2.Hide();
Form1.ShowDialog();
}
}
}