0

Window Form Application でフォームの表示または非表示に問題があります。

最初に program.cs ( Application.Run(new loginform());) で loginform の実行を開始し、ログインが成功したら別のフォーム ( Main Interface ) を表示し、2 番目のフォームが表示されたときに loginform を閉じるか非表示にしたいのですが、動かない。

私はそれを行う方法を知りません。それはスレッド関連の問題ですか?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace Myapp
{
   static class Program
   {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Loginfrm());

        }
    }
}
4

3 に答える 3

1

Loginfrmログインが成功したかどうかを示すプロパティをクラスに追加できます。次に、を閉じた後、Loginfrm別のメッセージ ループを開始できます。

例:

static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Loginfrm login = new Loginfrm(); 
    Application.Run(login);
    if (login.LogInSuccesfull)
        Application.Run(new MainForm());
}
于 2012-06-09T09:31:42.170 に答える
0

シングルトンの使用

MainInterface.cs

using System;

public class MainInterface : Form
{
   private static MainInterface Current;

   private MainInterface ()
   {
      if ( LoginForm . Instance != null )
         LoginForm . Instance . Close ();
   }

   public static MainInterface Instance
   {
      get 
      {
         if (Current == null)
         {
            Current = new MainInterface ();
         }
         return Current;
      }
   }
}

LoginForm.cs

using System;

public class LoginForm: Form
{
   private static LoginForm Current;

   private LoginForm ()
   {

      if ( MainInterface . Instance != null )
         MainInterface . Instance . Close ();
   }

   public static LoginForm Instance
   {
      get 
      {
         if (Current == null)
         {
            Current = new LoginForm ();
         }
         return Current;
      }
   }
}

Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace Myapp
{
   static class Program
   {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            LoginForm . Instance . ShowDialog ();

        }
    }
}

フォームの切り替え:

LoginFormから

LoginForm . Instance . Hide ();
MainInterface . Instance . ShowDialog ();

MainInterfaceから

MainInterface . Instance . Hide ();
LoginForm . Instance . ShowDialog ();

2つ以上のフォームについては、Managerクラス(例:Process)を使用して管理し、それらを切り替えることをお勧めします:)

よろしく、

于 2012-06-09T08:58:25.727 に答える
0
// in the mainform add to project form and call it SubForm
SubForm subform = new Subform();
subform.Show();
// in the subform
subform.Close();
于 2012-06-09T08:24:55.147 に答える