1

このPOSTソリューションを 6 時間分析して追跡した後でも、ログインフォームの frmLog はまだ閉じません。Microsoft Visual Studio C# ウィンドウ フォーム アプリケーションで 2 つのフォームを作成しました。私の問題は、さまざまな方法を使用してすべてを試しても、ログインフォームが閉じたり非表示になったりしないことです。これは非常に面倒で、この問題だけに多くの時間を費やしています。私を助けてください。

これは、起動フォームが初期化される Program.cs の私のコードです。

 public static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            frmLog fLogin = new frmLog();
            if (fLogin.ShowDialog() == DialogResult.OK)
            {
                Application.Run(new frmMain());
            }
            else
            {
                Application.Exit();
            }
        }

frmMainこれは、ユーザーとパスワードが実際にデータベースに接続されている場合にメインフォームを表示するログインフォームコードです。

 private void btnSubmit_Click(object sender, EventArgs e)
        {

                Mylibrary a = new Mylibrary("localhost", "root", "", "cashieringdb");
                string user = txtLogin.Text;
                string pass = txtPassword.Text;
                string query = "SELECT * FROM register WHERE username='" + user + "' AND password=MD5('" + pass + "')";
                int result = a.Count(query);
                if (result == 1)
                {
                    LOGIN_USER = txtLogin.Text;
                    frmMain main = new frmMain();
                    main.Show();
                    this.close
                }
                else
                {
                    MessageBox.Show("Login Failed! Try Again");
                    txtLogin.Text = "";
                    txtPassword.Text = "";
                }

        }

この問題を解決するのを手伝ってください。

4

7 に答える 7

1

これを使って

  static void Main()


{
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new frmLog ());

    }

frmlog内

使用する

this.hide();
new frmMain().ShowDialog();
于 2013-04-15T10:10:33.987 に答える
0

次のウィンドウを表示するときに、最初のウィンドウを非表示にする必要はありません。Program.cs ファイルの Program クラスの Main メソッドで、次の手順を実行します。

static void Main()
{
        if (Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName).Length > 1)
        {
            return;
        }

        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        MyFirstWindow fw = null;
        do
        {
            fw = new MyFirstWindow();
            Application.Run(fw);
        } while (!fw.checked);

        Application.Run(new MyNextWindow());
    }

MyFirstWindow クラスでわかるように、タイプが boolean でデフォルト値が false の isChecked プロパティがあります。そのため、いくつかのチェック (ログインなど) を実行し、checked プロパティの値を変更して、最初のウィンドウを閉じることができます。次のウィンドウは、checked プロパティが true でなくなるまで実行されません

于 2016-04-07T08:21:42.607 に答える
0

ログイン フォームはメイン フォームを表示する責任を負うべきではありません。メイン フォームは後でMainメソッドで処理されます。代わりに行うべきことは、DialogResult を返すことです。後でその値を確認するためです。

それは建築上の自殺であるため、私はあなたのコードについてはコメントしません。さまざまなレイヤーを 1 つの醜いごちゃごちゃに混ぜ合わせるなんて、うんざりだ。

解決策として提案された受け入れられた回答.Hide()BADです。.Visible=falseHide() は、あなたのシナリオでは意味をなさないと言うのと同じです。それはまだバックグラウンドに存在します。

于 2013-04-15T10:09:13.543 に答える
0

デフォルトMain()として変更:

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

this.Hide();代わりに使用してthis.Close();、これを試してください:

private void btnSubmit_Click(object sender, EventArgs e)
    {
            Mylibrary a = new Mylibrary("localhost", "root", "", "cashieringdb");
            string user = txtLogin.Text;
            string pass = txtPassword.Text;
            string query = "SELECT * FROM register WHERE username='" + user + "' AND password=MD5('" + pass + "')";
            int result = a.Count(query);
            if (result == 1)
            {
                LOGIN_USER = txtLogin.Text;
                frmMain main = new frmMain();
                main.Show();
                this.Hide();
            }
            else
            {
                MessageBox.Show("Login Failed! Try Again");
                txtLogin.Text = "";
                txtPassword.Text = "";
            }

    }
于 2013-04-15T10:10:52.457 に答える
0

多くの Q/A は、あなたが正しく始めたことを示唆しています。モーダルとしての呼び出し
から、結果がOKの場合は自動的に閉じられ、MainFormがによって実行されます。Main()LoginFormLoginFormApplicationRun(MainForm)

しかし、あなたはすでにMainFormから電話してLoginFormいます。

if (result == 1)
{
  LOGIN_USER = txtLogin.Text;
  frmMain main = new frmMain();
  main.Show();
  this.close
}

したがって、次のように変更します。

if (result == 1)
{
  LOGIN_USER = txtLogin.Text;
  //Logged in
  // return DialogResult.OK as it needed for Program.cs to allow load MainForm
  this.DialogResult = DialogResult.OK;
}

モーダルダイアログボックス- 「...ダイアログボックスが閉じられるまで、それに続くコードは実行されません...」

于 2013-10-20T08:38:58.527 に答える