1

複数の winform でアプリケーションをビルドしました。最初のフォームはログインフォームです。ユーザーがログインすると、別のフォーム、たとえばフォーム 2 が開かれ、そこからさらにフォーム 3、4、5 などに移動するメニュー ストリップがあります。

私が望むのは、ボタンを右上隅に配置して LOG OUT.次に、彼がどのフォームを使用しているかに関係なく、ログアウトできるようにします。彼がログアウトすると、最初のフォームが再び表示されます。これはどのように行うことができますか?フォーム 1 (ログイン フォーム、親) を閉じて、ログイン後にアプリケーション全体 (子フォーム) をシャットダウンすることはできますか?

次に必要なことは、制限を設けることです...つまり、通常のユーザーと管理者など、さまざまなタイプのユーザーが存在し、より多くのオプションが利用可能になるということです。ログイン部分を実行し、テキストボックス1とテキストボックス2などに一致するデータベースからのユーザー名とパスワードがあるかどうかを確認しましたが、上記で説明したことを実装するためのアドバイスが必要です.

ありがとう、ベイン

 private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                SqlConnection con1 = getConnection();
                con1.Open();
                SqlCommand com1 = new SqlCommand();
                com1.Connection = con1;
                com1.CommandType = CommandType.Text;
                com1.CommandText = "select * from radnik WHERE username = '" + textBox2.Text + "' AND password = '" + textBox3.Text + "'";
                SqlDataReader reader = com1.ExecuteReader();

                if (reader.Read())
                {
                    MessageBox.Show("Uspesno ste se ulogovali!");
                    Form2 form2 = new Form2();
                    form2.Show();

                }
                else { MessageBox.Show("Doslo je do greske!"); }
            }

            catch (Exception ee)
            {
                MessageBox.Show(ee.StackTrace);

            }
            Refresh();

        }

これはログインのための情報をチェックします

 private void stoloviToolStripMenuItem1_Click(object sender, EventArgs e)
    {
        var form3 = new Form3();
        form3.Show();

    }

    private void stoloviToolStripMenuItem_Click(object sender, EventArgs e)
    {

    }

    private void sifrarnikToolStripMenuItem_Click(object sender, EventArgs e)
    {
        var form4 = new Form4();
        form4.Show();
    }

    private void rezervacijeToolStripMenuItem_Click(object sender, EventArgs e)
    {
        var form6 = new Form6();
        form6.Show();
    }

    private void porudzbineToolStripMenuItem_Click(object sender, EventArgs e)
    {
        var form7 = new Form7();
        form7.Show();   
    }

    private void magacinToolStripMenuItem_Click(object sender, EventArgs e)
    {
        var form9 = new Form9();
        form9.Show();
    }

    private void button1_Click(object sender, EventArgs e)
    {

        Form1 fr1 = new Form1();
            fr1.Show();

    }

これは、ユーザーを別のwinformに導くだけです

4

2 に答える 2

2

これは典型的な MDI アプリケーションです。Main-Form (MDI Child の親) には、左上隅にボタンがあり、ユーザーがログインするとアクティブになります。ログイン プロンプトのフォームはモーダル フォームになります。ユーザーがログアウト ボタンをクリックすると、すべての子フォームを閉じてから、モーダル ログイン フォームを再度表示する必要があります。ユーザーの権限に関しては、実行するのは難しくありません。データベースにその特定の情報を含むフィールドを作成するだけです。バイト、整数、または好きなものにすることができます。1=通常ユーザー、2=管理者ユーザーなどとしましょう。

于 2013-06-05T12:09:22.660 に答える
0

3つのクラスが必要になると思います:

  1. ユーザーが資格情報を挿入し、loginButton
  2. メニューストリップを保持するためのメインフォーム。メニューボタンを押すと他のフォームが表示されます
  3. およびその他のカスタム コントロールを持つ子フォーム(基本的に、そこから他のlogoutButton子フォームを派生させることができます)

ログインフォームで、ログイン ボタンのクリックを次のように処理します。

private void loginButton_Click(object sender, EventArgs e)
{
    if (Authenticated(username.Text, password.Text))
    {
        var mainForm = new MainForm();
        this.Visible = false;
        mainForm.Show(this);
    }
}

メイン フォームに、フォームを閉じるイベントのハンドラーと、子を表示するためのいくつかのハンドラーを追加します。

public MainForm()
{
    InitializeComponent();
    FormClosing += MainForm_FormClosing;
}

void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
    this.Owner.Visible = true;
}

private void form1ToolStripMenuItem_Click(object sender, EventArgs e)
{
    var childForm = new ChildForm();
    childForm.Show(this);
}

子フォームで をクリックすると、子フォーム (メインlogoutButtonフォームになります) の所有者への参照を取得し、所有されているフォーム (すべての子フォーム) を閉じ、メインフォーム自体を閉じます。

private void logoutButton_Click(object sender, EventArgs e)
{
    var owner = ((MainForm)this.Owner);
    foreach (var childForm in owner.OwnedForms)
    {
        childForm.Close();
    }
    owner.Close();
}
于 2013-06-05T11:58:52.247 に答える