Nano Hash - криптовалюты, майнинг, программирование

Изменение метода на общий метод, доступный в другой форме

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

Исходная программа

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

public partial class VendorsDictionary : Form
{
    public VendorsDictionary()
    {
        InitializeComponent();
    }

    private Dictionary<string,string> vendorPhones = new Dictionary<string,string>();

    public void VendorsDictionary_Load(object sender, EventArgs e)
    {
        string currentLine;
        string[] fields = new string[2];
        StreamReader vendorReader = new StreamReader("Vendor.txt");

        while (vendorReader.EndOfStream == false)
        {
            currentLine = vendorReader.ReadLine();
            fields = currentLine.Split(',');

            vendorPhones.Add(fields[1], fields[6]);

            string[] name = { fields[1] };
            string[] city = { fields[3] };
            string[] state = { fields[4] };
            string[] zipcode = { fields[5] };
            string[] phone = { fields[6] };

            for (int i = 0; i < name.Length; i++)
            {
                lvDisplay.Items.Add(new ListViewItem(new[] { name[i], city[i], state[i], zipcode[i] }));
            }    
        }

        vendorReader.Close();
    }

    private void lvDisplay_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (lvDisplay.SelectedItems.Count>0)
        {
            ListViewItem item = lvDisplay.SelectedItems[0];
            lblName.Text = item.SubItems[0].Text;
            lblPhone.Text = vendorPhones[item.SubItems[0].Text];
        } 
    }

    private void btnUpdate_Click(object sender, EventArgs e)
    {
        UpdateVendor updateVendor = new UpdateVendor();
        updateVendor.Show();
    }
}

Я попытался изменить его на статический и ряд других идей, которые я нашел здесь, но, похоже, не могу заставить его работать. Любая помощь будет оценена по достоинству!


  • Итак, зачем вам функция VendorsDictionary_Load? Учитывая, что эта функция сохраняет результаты только в lvDisplay 14.05.2017
  • Возможный дубликат Как обмениваться данными между формами? 14.05.2017
  • Создайте общедоступное свойство в форме UpdateVendor (назовем его public string Name; и установите для него выбранный элемент (имя) в поле со списком). Затем используйте updateVendor.ShowDialog(); для запуска формы (ShowDialog() заблокирует выполнение в форме VendorsDictionary до тех пор, пока форма updateVendor не будет закрыта. Затем вы можете проверить свойство updateVendor.Name, и у вас есть имя, выбранное пользователем. 14.05.2017
  • @RufusL, как мне установить его для выбранного элемента списка? Разве мне не нужно было бы заполнять поле со списком именами? Извините, если это глупый вопрос, я только начал учиться программировать =/ 14.05.2017
  • О, я вижу, что неправильно понял всю проблему. Я постараюсь опубликовать ответ позже, но в основном это всегда похожий ответ. Вы можете сделать метод общедоступным в своей первой форме (возможно, не весь метод загрузки формы, а какой-то другой метод, который возвращает имена), а затем передать экземпляр form1 в form2. Или получите список имен в форме1, а затем передайте этот список в форму2 либо в качестве параметра метода формы2, либо в качестве свойства формы2. 14.05.2017

Ответы:


1

Вам не нужен весь этот код в вашем методе VendorsDictionary_Load. Вы действительно можете очистить его. Я покажу вам, как это сделать.

Добавьте этот класс в свой проект:

public class Vendor
{
    public string City { get; set; }
    public string Name { get; set; }
    public string Phone { get; set; }
    public string State { get; set; }
    public string ZipCode { get; set; }
}

Добавьте этот метод в VendorsDictionary:

public static IEnumerable<Vendor> LoadVendors()
{
    var vendors =
        File.ReadAllLines("Vendor.txt").Select(x => x.Split(','))
            .Select(x =>
            new Vendor
            {
                Name = x[1],
                City = x[3],
                State = x[4],
                ZipCode = x[5],
                Phone = x[6]
            }).ToList();

    return vendors;
}

Измените код в VendorsDictionary_Load на этот:

public void VendorsDictionary_Load(object sender, EventArgs e)
{
    var vendors = LoadVendors();
    foreach (var thisVendor in vendors)
    {
        vendorPhones.Add(thisVendor.Name, thisVendor.Phone);
        lvDisplay.Items
            .Add(new ListViewItem(new[] { thisVendor.Name, thisVendor.City,
                thisVendor.State, thisVendor.ZipCode }));
    }
}

Используйте метод LoadVendors везде, где хотите:

var someOtherUsage = VendorsDictionary.LoadVendors();

Чтобы улучшить этот код, отправьте путь к LoadVendors, чтобы вы могли загружать поставщиков из любого места. Кроме того, VendorDictionary не является хорошим именем для формы.

14.05.2017
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..