yoavarviv Ответов: 2

Как передать данные между 2 формами? С#


Я ищу, чтобы передать значения 2 переменных между 2 формами, я не могу получить это правильно.
любая помощь будет оценена по достоинству ;)
Кстати, я не получаю никаких ошибок, я просто ищу способ передачи password.text и username.text в form2, какой-нибудь совет?

Что я уже пробовал:

public Form3(string password,string username)
        {
            InitializeComponent();
            password = this.password.Text;
            username = textBox1.Text;

        }
        public Form3() 
        { InitializeComponent();
            
        }



        private void button1_Click(object sender, EventArgs e)
        {
            string password = password.Text;
            string username = textBox1.Text;
            string repassword = passwordre.Text;
            if (password == repassword)
            {
                MessageBox.Show("Successfully Registered");

                Form1 startupwin = new Form1();
                Form3 newwindow = new Form3();
                this.Close();
                startupwin.Show();
            }
            else
            {
                MessageBox.Show("Passwords Do Not Match OR Not All Required Fields Filled");
                this.Close();
                Form3 newwindow3 = new Form3();
                newwindow3.Show();
            }

2 Ответов

Рейтинг:
20

phil.o

Почему вы пытаетесь передать имя пользователя и пароль обратно в form2? В идеале проверка должна быть выполнена в форме 3, которая не должна позволять закрываться, если пароль и пароль не совпадают, и должна возвращать либо то, либо другое DialogResult.OK если имя пользователя и пароль совпадают вместе (успешный логин), или DialogResult.Cancel если они этого не делают (неправильное имя пользователя или неправильный пароль).
Затем form2 может использовать DialogResult экземпляра form3, чтобы узнать, был ли вход в систему успешным.
Вот краткая "архитектура", чтобы поставить вас на путь:

public class Form2 : Form
{
   private void LoginButton_Click(object sender, EventArgs e)
   {
      using (Form3 form = new Form3())
      {
         if (form.ShowDialog(this) == DialogResult.OK)
         {
            // Sucessful login

            // You can get the username back here. I don't think you need the
            // password, though. Passwords are only useful in Form3's context.
            string username = form.Username;
         }
         else
         {
            // Login failed
         }
      }
   }
}

public class Form3 : Form
{
   // This property will allow you to get the username, eventually.
   public string Username => UsernameTextBox.Text;

   // This event handler should be attached to the Validated event
   // of PasswordTextBox and PasswordRepeatTextBox. It disables the OK
   // button if both entries do not match. There is no point in enabling
   // to login if these values do not match in the first place.
   private void TextBox_Validated(object sender, EventArgs e)
   {
      OkButton.Enabled =
         PasswordTextBox.Text == PasswordRepeatTextBox.Text;
   }

   // This event handler must be attached to the Click event of the OK button.
   // It sets the form's DialogResult according to the validity of the
   // username/passsword pair.
   private void OkButton_Click(object sender, EventArgs e)
   {
      this.DialogResult =
         (IsValidLogin(UsernameTextBox.Text, PasswordTextBox.Text))
            ? DialogResult.OK
            : DialogResult.Cancel;
      this.Close();     
   }

   private bool IsValidLogin(string username, string password)
   {
      // TODO : you have to implement an actual username/password validation
      // strategy.
   }
}

У меня также есть ощущение, что вам следует начать с чего-то более простого, чем система входа в систему, поскольку вы, похоже, еще не поняли основ ООП. Например, вы не можете создать новый экземпляр form2 в form3 и ожидать, что получите ссылку на уже существующий экземпляр form2. Когда вы создаете новый экземпляр, он отличается от всех других экземпляров того же класса, которые могли быть созданы до сих пор.
И, как правило, советую начать с ручки и бумаги, и нарисовать краткую диаграмму важных шагов, которые должны быть выполнены; это позволит вам написать более четкий и эффективный код позже.


yoavarviv

спасибо, сделаю что-нибудь попроще ;)

Рейтинг:
10

OriginalGriff

Вы должны начать думать об этом для себя: это ваш третий вопрос с тем же кодом ... или "слегка измененными" версиями того же кода.

Это совсем не сложно. Это даже довольно простые вещи.
Вы можете посмотреть здесь: Передача информации между двумя формами, Часть 1: Родитель-Ребенок[^]

А затем подумайте о том, что именно делает ваш код ... потому что совершенно очевидно, что вы не сели и не решили, что вам нужно сделать, прежде чем погрузиться в код, и это действительно, действительно поможет вам. Я бы начал с разработки "потока данных", который должен видеть пользователь, и пошел бы оттуда, начиная с чистого листа бумаги.

И измените имена ваших форм, чтобы они отражали то, что они делают, точно так же, как вы сделали это с текстовыми полями - это делает ваш код намного более читаемым, а это означает, что он с большей вероятностью будет работать.


yoavarviv

спасибо за вашу помощь, я просто практикуюсь, сейчас я изучаю кодирование самостоятельно, и я не понимал некоторых ошибок, я закончил тем, что исправил их сам, srry, если я Вас чем-то рассердил

OriginalGriff

"Сейчас я изучаю кодирование самостоятельно"
Это, вероятно, большая часть вашей проблемы.
Когда вы "учитесь самостоятельно", это проблема, потому что вы не получаете контекста для того, что вы должны сделать, поэтому вы не понимаете, почему это необходимо, а затем, когда возникает проблема, вы не знаете, с чего начать, чтобы исправить ее. И... никогда не знаешь, есть ли более простой способ сделать что-то, что могло бы облегчить твою жизнь. Просто пытаться подобрать его по ходу дела не работает: вы не знаете, был ли код, который вы нашли, хорош, и вы даже не знаете о существовании более простых способов!
Я бы очень настоятельно рекомендовал вам пройти курс (лучший вариант - если вы не понимаете, чему вас учат, вы можете поговорить с настоящим человеческим преподавателем, который может перефразировать, пока вы не сделаете это), или получить книгу (Wrox, Addison Wesley и Microsoft Press делают некоторые очень хорошие, и ваша местная библиотека может иметь доступ к ним, или есть желтая книга:
https://www.robmiles.com/c-yellow-book/
который свободен и начинается с самого начала (но не заходит так далеко в рамки, как другие)
Как бы то ни было, начните с самого начала и следуйте ему, выполняя все упражнения.

Вам нужно получить основы OOPs под вашим поясом, прежде чем вы даже начнете кодировать приложения Windows!

yoavarviv

Спасибо за вашу помощь, я обязательно возьму репетитора. ;)

yoavarviv

может быть, вы можете написать мне код, который мне нужно добавить, чтобы я мог лучше понять его, я не знаю почему, но мне кажется, что код, который я делаю, не работает