3

私はC#を初めて使用するので、問題はログインフォームにあります。

ユーザークラスが「admin」以外の場合、送信ボタンを押すたびにログインフォームに戻ります。ですから、私が推測している条件が真でない場合、私のステートメントは停止します。これが私のコードです。

--------編集初心者の制限について申し訳ありませんが、ここに私が持っているものがあります:ユーザーが持っているロールに応じたユーザー名とロールを持つSQLテーブルは異なるフォームをロードします

// Compare strings
 private bool CompareStrings(string string1, string string2)
    {
        return String.Compare(string1, string2, true, System.Globalization.CultureInfo.InvariantCulture) == 0 ? true : false;
    }




// button on Login form    
public void button1_Click(object sender, EventArgs e)
    {
        try
        {
            SqlConnection UGIcon = new SqlConnection();
            UGIcon.ConnectionString = "Data Source=BVSQL; Initial Catalog=BV1;user id=jose; password=jones6;";

            UGIcon.Open();
            SqlCommand cmd = new SqlCommand("SELECT ISNULL(bvuser, '') AS stUsername, ISNULL(bvpassword,'') AS stPassword, ISNULL(bvclass, '') AS stRole FROM BVusertable WHERE bvuser='" + textBox1.Text + "' and bvpassword='" + textBox2.Text + "'", UGIcon);
            SqlDataReader dr = cmd.ExecuteReader();

            string userText = textBox1.Text;
            string passText = textBox2.Text;
            //string stRole = "admin";

            dr.Read();
            {
                if
                   (this.CompareStrings(dr["stUsername"].ToString(), userText) &&
                    this.CompareStrings(dr["stPassword"].ToString(), passText)
                    )
                {
                    if (this.CompareStrings(dr["stRole"].ToString(), "admin"))
                    {
                        this.DialogResult = DialogResult.OK;
                    }
                    else if (this.CompareStrings(dr["stRole"].ToString(), "user"))
                    {
                        this.DialogResult = DialogResult.No;
                    }
                }
                else
                {
                    //MessageBox.Show("Error");
                }
            }
            dr.Close();
            UGIcon.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show("Login Falied");
        }
    }

これがPrograms.csです

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

namespace BV_SOFT
{
static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Loginf fLogin = new Loginf();
        if (fLogin.ShowDialog() == DialogResult.OK)
        {
            Application.Run(new Home2());
        }
        else
        if (fLogin.ShowDialog() == DialogResult.No)
        {
            Application.Run(new Home3());
        }
        else
        {
            Application.Exit();
        }
4

2 に答える 2

2

ShowDialog を 2 回呼び出しています。これを試して:

Loginf fLogin = new Loginf();
DialogResult result = fLogin.ShowDialog();
if (result == DialogResult.OK)
{
    Application.Run(new Home2());
}
else if (result == DialogResult.No)
{
    Application.Run(new Home3());
}
else
{
    Application.Exit();
}

2 回呼び出すShowDialogと、フォームが 2 回表示されます。これを使用すると、一度だけ表示されます。あなたのコードでは、ロールが「管理者」でない場合、else ブロックが実行され、ShowDialog 再度呼び出されてフォームが再度表示されますが、これは必要なものではありません。フォームを一度表示し、結果を保存し、保存された結果をチェックします。

于 2013-02-21T00:40:16.683 に答える
1

ユーザーが「管理者」ロールを持っている場合にのみに設定しDialogResultています。OK

ロールが「ユーザー」の場合を除いて、他のすべてのケースでは、結果を未設定のままにします。これは、フォームが閉じられないことを意味します。

あなたのロジックが何であるかを知らなければ、それがどうあるべきかを提案することはできません.

于 2013-02-20T23:57:09.573 に答える