Форма не содержит конструктора, который принимает 0 аргументов

#c# #visual-studio #winforms

#c# #visual-studio #winforms

Вопрос:

ФОРМА 1

 public partial class Login : Form
{
    string cons =ConfigurationManager.ConnectionStrings["SSBarConnection"].ConnectionString;

    public Login()
    {
        InitializeComponent();
    }
    public class passData
    {
        public string UserRole = "";  
    }
    private void btn_login_Click(object sender, EventArgs e)
    {
        try
        {

            if (output == "1" amp;amp; output2 != "")
            {
                passData s = new passData();
                s.UserRole = output2.ToString();
                Main FRFM1 = new Main();
                FRFM1.Show();
            }
        }
  

ФОРМА 2

 namespace SSBar
{
    public partial class Main : Form
    {
        SSBar.Login.passData s;
        public string sa;

        public Main(Login.passData s1)
        {
            InitializeComponent();
            s = s1;
        }
 private void Main_Load(object sender, EventArgs e)
        {   
            sa=s.UserRole;
            ss_user.Text = s.UserRole;
        }
    }
  

Комментарии:

1. public Main(Login.passData s1) это ваш конструктор, он принимает аргументы…

2. как решить? Не идея

3. @NilupulUdaraka — Передайте экземпляр Login.passData конструктору.

4. что тут решать… У Main нет конструктора без параметров, потому что он содержит (требует) некоторые данные «passData», которые должны быть ему предоставлены. Вы можете создать конструктор без параметров, но ему придется инициализировать «passData» чем-то

5. @NilupulUdaraka — Создайте свою форму следующим образом: Main FRFM1 = new Main(s); .

Ответ №1:

 class SomeClass
{

}

class SomeClass
{
    public SomeClass()
    {
        //we will leave this empty
    }
}
  

Эти два класса являются одними и теми же классами. В первом случае у нас нет никакого конструктора, во втором случае у нас есть конструктор, но ему не нужны никакие аргументы.

Если мы сделаем это так:

 class SomeClass
{
    public SomeClass(string GiveMeArgument)
    {

    }
}

class SomeClass
{
    public SomeClass()
    {
        //we will leave this empty
    }


    public SomeClass(string GiveMeArgument)
    {

    }
}
  

Эти два класса не совпадают. Теперь вы спрашиваете себя «почему нет, единственное, что мы сделали, это добавили другой конструктор, который можно было бы использовать для создания объекта, но мы сделали это для обоих классов», и ответ таков: мы добавили тот же конструктор, НО вот одно золотое правило: «Если у класса нет конструктора, он будет вести себя так, как будто у него пустой конструктор (как в моем первом коде), НО если у класса есть ХОТЯ бы один конструктор, его поведение по умолчанию больше не будет допустимым «. Итак, если мы посмотрим на наш второй пример, когда мы добавили этот конструктор, который требует аргумента, мы ПОТЕРЯЛИ поведение класса по умолчанию, позволяющее создавать его без аргументов.

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

Комментарии:

1. Большое вам спасибо @Aleksa