0

このコード:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;

namespace WindowsFormsApplication2
{
public partial class Form2 : Form
{
    private void Form2_Load(object sender, EventArgs e)
    {
        pictureBox2.SizeMode = PictureBoxSizeMode.Zoom;
    }

    public Form2()
    {
        InitializeComponent();
    }
    public bool radioButtons()
    {
        if (!userRadioButton.Checked && !adminRadioButton.Checked)
        {
            MessageBox.Show("You must select an account type");
            return false;
        }
        else
        {
            return true;
        }
    }

    public void button1_Click(object sender, EventArgs e)
    {
        bool a = radioButtons();
        if (a == true)
        {
            string userName = userNameBox.Text;
            string password = passwordBox.Text;
            if (checkUsernameValid() && checkUsernameNotExist() && checkPasswordsValid() && checkPasswordsMatch())
            {
                allOK();
            }


        }   
    } 
    public void mySW()
    {
         string path = @"C:\Other\myFile.txt";
        string userName = userNameBox.Text;
        string password = passwordBox.Text;
        using (StreamWriter writer = new StreamWriter(path, true))
        {
            writer.WriteLine(userName+" "+password);
            writer.WriteLine();
            writer.Close();
            writer.Dispose();
        }
        MessageBox.Show("Thanks for registering! \n\nYou may now log in!","Registration SuccessFul");
        Application.OpenForms[0].Show();
        this.Close();
    }
    public bool checkUsernameValid()
    {
        if (userNameBox.Text == "")
        {
            MessageBox.Show("Username cannot be empty", "Invalid Username Entry");
            return false;
        }
        else
            return true;
    }
    public bool checkPasswordsMatch()
    {
        if (!passwordBox.Text.Equals(repeatPasswordBox.Text))
        {
            MessageBox.Show("Sorry, your passwords do not match, try again", "Password Error");
            passwordBox.Text = "";
            repeatPasswordBox.Text = "";
            return false;
        }
        else
            return true;
    }
    public bool checkUsernameNotExist()
    {
        var userNames = File.ReadAllLines(@"C:\Other\myFile.txt");
        if (userNames.Contains(userNameBox.Text))
        {
            MessageBox.Show(
                 "Sorry, that user name is not available, try again",
                 "Invalid Username Entry");

            userNameBox.Text = "";
            passwordBox.Text = "";
            repeatPasswordBox.Text = "";
            return false;
        }
        else
            return true;
    }
    public void allOK()
    {
        if (!userNameBox.Text.Contains("Username: " + userNameBox.Text) && passwordBox.Text == repeatPasswordBox.Text)
            {
                mySW();
            }
    }
    public bool checkPasswordsValid()
    {
        if (passwordBox.Text == "")
        {
            MessageBox.Show("Password fields cannot be empty", "Password Error");
            return false;
        }
        else
            return true;
    }

   }
}

完全なコードですが、私はそれを見てきました。なぜ同じユーザー名を登録できるのか、まだわかりません???? デバッガーで「はい、一致する文字列があります」と言っているのがわからないので、true を返しましょうか?!

注:ReadAllLinesではなくReadAllTextでソートできましたが、行が機能しなかった理由がわかりませんか?誰でも何か考えがありますか?

PSこのコード、もっと簡単で安全な方法はありますか? 私が欲しいのはシンプルなログイン画面です笑

4

5 に答える 5

0

ファイル。readAllLinesは、Contains メソッドを持たない string[] オブジェクトを返します。

「var」をデータ型として使用すると、C# VM がそれを文字列にキャストできるようになると思います。readAllLines から期待されるデータ型を明確に指定することをお勧めします。それ以外の場合は、readAllLines の呼び出しを readAllText の呼び出しに置き換えることができます。

readAllTextは、含まれているすべてのテキストを含む単一の文字列を返します。

于 2013-09-29T13:38:40.807 に答える
0

今すぐうまくいくか試してください

bool _ans;
public bool checkUsernameNotExist()
{
    string[] userNames = File.ReadAllLines(@"C:\Other\myFile.txt");
    foreach (string name in userNames)
    {
        if (name != userNameBox.Text)
        {                
            MessageBox.Show(
                 "Sorry, that user name is not available, try again",
                 "Invalid Username Entry");

            userNameBox.Text = "";
            passwordBox.Text = "";
            repeatPasswordBox.Text = "";
            _ans = false;
            return false;
        }
        else
            _ans = true;
            return true;
    }
    return _ans;
}
于 2013-09-29T13:44:51.820 に答える
0

あるはずです!!userNames.Containsユーザーがスペースを入力できる可能性があるという理由だけで、Trim() を使用することをお勧めします。

if (!userNames.Contains(userNameBox.Text.Trim()))
    {                
        MessageBox.Show(
             "Sorry, that user name is not available, try again",
             "Invalid Username Entry");

        userNameBox.Text = "";
        passwordBox.Text = "";
        repeatPasswordBox.Text = "";
        return false;
    }
    else
        return true;
于 2013-09-29T13:39:54.293 に答える
0

userNameBox.Text末尾および先頭の空白を削除してみてください。また、大文字と小文字が異なる場合があります。

コードを実際にデバッグして、リストに含まれる内容とテキスト ボックスの値を確認することをお勧めします。

于 2013-09-29T13:24:51.437 に答える