Вызов .cs файла / программы по нажатию кнопки - PullRequest
0 голосов
/ 27 апреля 2010
        //compares text to the id number below



   }

НАЗВАНИЕ КЛАССА - ОТДЕЛЬНЫЙ ФАЙЛ .CS ВСЕ В ЭТОМ ЖЕ ПРОЕКТЕ И ОПИСАНО НИЖЕ

 using System;
 using System.IO;
 using System.Data;
 using System.Text;
 using System.Drawing;
 using System.Data.OleDb;
 using System.Collections;
 using System.ComponentModel;
 using System.Windows.Forms;
 using System.Drawing.Printing;
 using System.Collections.Generic;

 namespace Eagle_Eye_Class_Finder
 {
     class GetSchedule
     {
          class IDnumber
         {

             public string Name { get; set; }
            public string ID { get; set; }
            public string year { get; set; }
            public string class1 { get; set; }
            public string class2 { get; set; }
            public string class3 { get; set; }
            public string class4 { get; set; }

        }


            //
            // Displays the Students Class Schedule.
            //
            Console.WriteLine("--- Students Class Schedule ---");
            foreach (IDnumber IDnumber in IDnumbers)
            {                          
                Console.Write(IDnumber.Name);
                Console.Write(": ");
                Console.WriteLine(IDnumber.ID);
                Console.WriteLine(IDnumber.year);
                Console.WriteLine(IDnumber.class1);
                Console.WriteLine(IDnumber.class2);
                Console.WriteLine(IDnumber.class3);
                Console.WriteLine(IDnumber.class4);


                //get { return this.label1.Text; }
                //set { this.label1.Text = class1; }

                //get { return this.label2.Text; }
                //set { this.label2.Text = class2; }


                //get { return this.label3.Text; }
                //set { this.label3.Text = class3; }

                //get { return this.label4.Text; }
                //set { this.label1.Text = class4; }
            }

            // Clear first two elements in IDnumbers array.

            Array.Clear(IDnumbers, 0, Math.Min(2, IDnumbers.Length));
        }

    }
}

Ответы [ 3 ]

1 голос
/ 27 апреля 2010

Измените определение GetSchedule на Public Class и Public Static Main, и тогда код Дэвида сработает.

Уровень доступа по умолчанию для класса, определенного только с class, равен internal (C #) / friend (VB).

0 голосов
/ 27 апреля 2010

Очевидный ответ:

Eagle_Eye_Class_Finder.GetSchedule.Main()

Но мне кажется, что вы надеетесь что-то сделать со значением 900456317

Чтобы это работало, вам нужно объявить дополнительную функцию, которая получает это значение в качестве параметра, а затем делает с ним что-то полезное. Может быть что-то вроде:

static void ProcessNumber(IDNumber myNum)
{
    StringBuilder myData = new StringBuilder();
    myData.AppendLine(IDnumber.Name);   
    myData.AppendLine(": ");   
    myData.AppendLine(IDnumber.ID);   
    myData.AppendLine(IDnumber.year);   
    myData.AppendLine(IDnumber.class1);   
    myData.AppendLine(IDnumber.class2);   
    myData.AppendLine(IDnumber.class3);   
    myData.AppendLine(IDnumber.class4);  
    MessageBox.Show(myData);
}

Тогда вы можете назвать это как:

   if (text == "900456317")    
   {    
        Eagle_Eye_Class_Finder.GetSchedule.ProcessNumber(new IDnumber() { Name = "Joshua Banks",ID = "900456317", year = "Senior", class1 = "TEET 4090", class2 = "TEET 3020", class3 = "TEET 3090", class4 = "TEET 4290" });     

   } 

Возможно, было бы проще, если бы вы могли дать более подробную информацию о том, что именно вы надеетесь достичь.

EDIT

Что для этого нужно сделать, это переместить концепцию массива IDnumbers из самого вызова функции в член класса. Например, рассмотрите возможность добавления следующего кода:

IDnumber[] IDnumbers = new IDnumber[3];   

public GetSchedule()
{
        IDnumbers[0] = new IDnumber() { Name = "Joshua Banks",ID = "900456317", year = "Senior", class1 = "TEET 4090", class2 = "TEET 3020", class3 = "TEET 3090", class4 = "TEET 4290" };    
        IDnumbers[1] = new IDnumber() { Name = "Sean Ward", ID = "900456318", year = "Junior", class1 = "ENGNR 4090", class2 = "ENGNR 3020", class3 = "ENGNR 3090", class4 = "ENGNR 4290" };    
        IDnumbers[2] = new IDnumber() { Name = "Terrell Johnson",ID = "900456319",year = "Sophomore", class1 = "BUS 4090", class2 = "BUS 3020", class3 = "BUS 3090", class4 = "BUS 4290" };    

}

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

public string GetDataFromNumber(string ID)
{
    foreach (IDnumber idCandidateMatch in IDnumbers)         
    { 
        if (IDCandidateMatch.ID == ID)
        {
            StringBuilder myData = new StringBuilder();
            myData.AppendLine(IDnumber.Name);   
            myData.AppendLine(": ");   
            myData.AppendLine(IDnumber.ID);   
            myData.AppendLine(IDnumber.year);   
            myData.AppendLine(IDnumber.class1);   
            myData.AppendLine(IDnumber.class2);   
            myData.AppendLine(IDnumber.class3);   
            myData.AppendLine(IDnumber.class4);  
            return myData;
        }
    }
    return "";
}

И тогда ваш вызов метода из Form1 изменится на:

public void button2_Click(object sender, System.EventArgs e)             
{             


   string text = textBox1.Text;             
   Mainform = this;             

   this.Hide();             

   GetSchedule myScheduleFinder = new GetSchedule();
   string result = myScheduleFinder.GetDataFromNumber(text); 
   if (!string.IsNullOrEmpty(result))             
    {             
        MessageBox.Show(result);
   }             
   else             
   {             
       MessageBox.Show("Enter A Valid ID Number!");             
   }             

}

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

   GetSchedule myScheduleFinder = new GetSchedule();

в основном говорит: «Мне нужна новая копия моего класса GetSchedule, и я хочу отслеживать ее с именем« myScheduleFinder »». Всякий раз, когда вы видите слово «новый» в C #, это то, что происходит. Когда за словом «new» следуют имя класса и скобки, оно вызывает то, что называется «конструктором». Конструкторы - это в основном специальные функции, которые вызываются каждый раз при создании класса; в вашем случае это код, который мы поместили в метод

public GetSchedule()

Теперь, учитывая, что у нас есть копия класса GetSchedule, правильно инициализированная нашим конструктором, мы можем вызвать функцию ProcessNumber для этого класса, передав число, которое мы ищем. Оператор 'if' в основном гарантирует, что из всех наших возможных записей мы используем только ту, которая имеет тот же идентификатор. Затем мы берем эту запись, преобразуем ее в строку и возвращаем. Затем мы показываем это в изящном маленьком окне сообщения, хотя вы, очевидно, можете делать с ним все, что захотите.

0 голосов
/ 27 апреля 2010

Это должно сделать это:

Eagle_Eye_Class_Finder.GetSchedule.Main()
...