Member 12456995 Ответов: 3

Как вызвать метод из другой формы


Как я могу передать этот метод из другой формы в другую



        public class arka_data

  {

      public int NR { get; set; }

      public int BARKODI { get; set; }

      public string EMERTIMI { get; set; }

      public int SASIA {get;set;}

      public float CMIMI {get;set;}

      public float TVSH { get; set; }

      public float TOTAL { get; set; }

      public float NENTOTALI { get; set; }

      public float ZBRITJA { get; set; }

      public float TOTALI { get; set; }

      public DateTime KOHA { get; set; }

      public string KASIERI { get; set; }

      public string KLIENTI { get; set; }

      public float VLERAETVSH { get; set; }

      public float VLERAPATVSH { get; set; }

      public int NRATIKUJVE { get; set; }

      public float TOTALIPCS { get; set; }

      public float VLERATVSHTOTAL { get; set; }





  }

  public void mbushe()

{

     arka_data dta  = new arka_data();

     for (int i = 0; i < dataTable.Rows.Count; i++)

    {

        dta.NR = int.Parse(txtnrfatures.Text);

        dta.VLERATVSHTOTAL = float.Parse( textBox1.Text);

        dta.BARKODI = int.Parse(dataTable.Rows[i][0].ToString());

        dta.EMERTIMI = dataTable.Rows[i][1].ToString();

        dta.SASIA = int.Parse(dataTable.Rows[i][2].ToString());

        dta.CMIMI = int.Parse(dataTable.Rows[i][3].ToString());

        dta.TVSH = int.Parse(dataTable.Rows[i][4].ToString());

        dta.NENTOTALI = float.Parse(txttotali.Text);

        dta.ZBRITJA = float.Parse(txtzbritja.Text);

        dta.TOTALI = float.Parse(totali.Text);

        dta.KOHA = DateTime.Now;

        dta.KASIERI = lbluser.Text;

        dta.KLIENTI = cmbklienti.Text;

        dta.VLERAETVSH = float.Parse(dataTable.Rows[i][7].ToString());

        dta.VLERAPATVSH = float.Parse(dataTable.Rows[i][6].ToString());

        dta.NRATIKUJVE = int.Parse(lblnumri.Text);

        dta.TOTALIPCS = float.Parse(dataTable.Rows[i][5].ToString());

    }


Идея заключается в том , что этот класс обрабатывает данные из формы один и использует их(вставляет в sql) на форме два . Как я должен передать объект в другой форме, или как я должен сослаться на него. Также другой вопрос заключается в правильном заполнении класса (из : textbox, labels и datagridview ). Метод mbushe собирает данные , и эти данные должны быть переданы одному frm2. Но вопрос в том, как получить эти данные на frm2

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

Я создал этот метод на frm1 , но не имею ни малейшего понятия, как продолжить. Я попробовал арку. Мбуше но получаю эту ошибку ' is a 'method', which is not valid in the given contextИдея заключается в том, что во время вставки данных на frm2 я использую эти данные следующим образом
cmd.Parameters.Add(new SqlParameter("@nrfatures", mbushe.NR);

3 Ответов

Рейтинг:
2

OriginalGriff

Не. Form2 не должен знать, что Form1 существует, а тем более какие методы он содержит. Вместо этого он должен использовать события, чтобы сообщить Form1, что что-то нужно сделать.

Как именно, зависит от "отношения" между этими двумя формами.
Взгляните на них, один из них будет соответствовать вашим обстоятельствам.
Форма, которая создает экземпляр другого:

MyForm mf = new MyForm();
mf.Show();
Это "родитель", другая форма - "Ребенок".
(Это не подразумевает никаких формальных отношений MDI)

Передача информации между двумя формами, Часть 1: Родитель-Ребенок[^]
Передача информации между двумя формами, Часть 2: Ребенок-Родитель[^]
Передача информации между двумя формами, Часть 3: Ребенок ребенку[^]


Рейтинг:
2

RickZeeland

Существует несколько способов, но один из самых простых-создать Статический класс, видеть: https://www.dotnetperls.com/static[^]
Учебник C# Static[^]

Быстрый и грязный способ-использовать программу статического класса, которая уже присутствует в проекте Winforms.


[no name]

Но я попробовал статический класс,но не работает, он выбрасывает этот код ошибки"Ошибка 4 не может создать экземпляр статического класса "

RickZeeland

Правильно, вы не можете создавать экземпляры, просто используйте статический класс напрямую.
Внимательно посмотрите на примеры Dotnetperls :)

[no name]

Но я не пытаюсь передать пустой класс, я пытаюсь вызвать метод, который обрабатывает нестатические данные из textbox, datagridview.

RickZeeland

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

Рейтинг:
1

Maciej Los

Вы смешали несколько вещей!

1. Двигаться arka_data в отдельные файлы
2. найдите файл Program.cs и добавьте эту строку:

public static List<arka_data> dta;

3. В конструкторе form1 :
public Form1()
{
    InitializeComponent();
    Program.dta = new List<arka_data>();
}

4. Где-то после... заполните свой список ДТА.
public void mbushe()
{
     for (int i = 0; i < dataTable.Rows.Count; i++)

    {
        arka_data ad = new arka_data();
        ad.NR = int.Parse(txtnrfatures.Text);
        ad.VLERATVSHTOTAL = float.Parse( textBox1.Text);
        ad.BARKODI = int.Parse(dataTable.Rows[i][0].ToString());
        ad.EMERTIMI = dataTable.Rows[i][1].ToString();
        ad.SASIA = int.Parse(dataTable.Rows[i][2].ToString());
        ad.CMIMI = int.Parse(dataTable.Rows[i][3].ToString());
        ad.TVSH = int.Parse(dataTable.Rows[i][4].ToString());
        ad.NENTOTALI = float.Parse(txttotali.Text);
        ad.ZBRITJA = float.Parse(txtzbritja.Text);
        ad.TOTALI = float.Parse(totali.Text);
        ad.KOHA = DateTime.Now;
        ad.KASIERI = lbluser.Text;
        ad.KLIENTI = cmbklienti.Text;
        ad.VLERAETVSH = float.Parse(dataTable.Rows[i][7].ToString());
        ad.VLERAPATVSH = float.Parse(dataTable.Rows[i][6].ToString());
        ad.NRATIKUJVE = int.Parse(lblnumri.Text);
        ad.TOTALIPCS = float.Parse(dataTable.Rows[i][5].ToString());
        //and finally
        Program.dta.Add(ad);
    }

4. Если вы хотите отредактировать одну запись в Form2, вам нужно создать конструктор, который принимает arka_data класс как параметр. См. решение № 2 по OriginalGriff.


[no name]

Как теперь я могу хранить данные в sql DB, используя эти данные? Какой код я должен добавить, чтобы использовать программу.dta собранные данные. и вместо этого
txtnrfatures.Текст
для использования программы".ДТА.НР"

SqlCommand cmd = new SqlCommand("insertfaturimi", conn);
УМК.Свойство Commandtype = Значение Commandtype.Хранимая процедура;
cmd.параметры.Четкий();
cmd.параметры.Add(new SqlParameter("@nrfatures", int.Parse(txtnrfatures.Текст)));
cmd.параметры.Добавить(новый SqlParameter ("@klienti", cmbklienti.Text));
cmd.параметры.Добавить(новый SqlParameter ("@pagesa", faturimi));

Maciej Los

program.dta.NR не существует! Program.dta существует!
Также arka_data ad = Program.dta.Where(x=> x.NR==some_value).SingleOrDefault() существует!
Итак, вы можете использовать ad теперь переменная.

[no name]

Как обратиться в form2 к program.dta и использовать его?Потому что я пытаюсь создать новый экземпляр program.dta, но не работаю
Также как очистить program.dta после вставки earch? Потому что эта программа должна вставлять много данных

Maciej Los

Вам не нужно создавать новый экземпляр Program.dta! Представьте, что ваши данные хранятся в переменной.

Извините, но я не понимаю остальную часть вашего вопроса.

[no name]

Хорошо, как обратиться к этому варианту во 2-м классе. Таким образом, чтобы иметь возможность дать из этого variabile каждый параметр

cmd.параметры.Add(new SqlParameter ("@nrfatures", //variabile_parameter1);
cmd.параметры.Add(new SqlParameter ("@klienti", //variabile_parameter1);
cmd.параметры.Add(new SqlParameter ("@pagesa", //variabile_parameter1);

Как я должен обратиться к этому варианту во 2-й форме? Спасибо снова

Maciej Los

Вы читали оригинальные статьи Гриффа? Там есть полный учебник.
Как я уже упоминал ранее, вы должны создать параметризованный конструктор Form2. Тогда вы должны передать ему переменную "ad"!

[no name]

@Maciej Los, что-то не так с методом void mbushe, потому что никакие данные не собираются (нулевое значение). Я проверил еще раз, но все еще отсутствовал

[no name]

Я ставлю одну точку останова или строку Program.dta.Add(ad)в метод void и при появлении ошибки проверяю, нет ли собранных данных , только 0.0, null и для даты{1/1/0001 12:00:00 AM} вместо datetime.теперь ценность. Что-то не так с методом пустоты

Maciej Los

Что за ошибка? Что такое сообщение об ошибке?