none
Как обработать это? RRS feed

  • Вопрос

  • как динамический создать несколько объектов количество которых определяется в рантайме

    напирмер:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace Mechanism
    {
        class Delta
        {
            private string adress;
            private string name;
            private byte id;
            private static byte CurrentPool;
    
            public Delta(byte _id, string _adress)
            {
                ID = _id;
                Adress = _adress;
                CurrentPool++;
            }
    
            public string Adress {
                get { return adress; }
                set { if (value!=null) adress = value;
                }
            }
            public string Name {
                get { return GetNameFromPath(); }
                set { name = value; }
            }
    
            public byte ID {
                get { return id; }
                set { id = value; }
            }
    
            public static byte GetPool()
            {
                return CurrentPool;
            }
    
            private string GetNameFromPath()
            {
                var delimeters = new[]{':', '/', '\\'};
                string[] path = Adress.Split(delimeters);
                return path[path.Length - 1];
            }
    
            public byte GetID()
            {
                return ID;
            }
        }
    }
    

    и есть еще 1 класс

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Diagnostics;
    
    namespace Mechanism
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            #region
    
            private string[] files;
            private Delta[] deltases = new Delta[10];
            #endregion
    
    
            private void button1_Click(object sender, EventArgs e)
            {
                const string ad = @"C:\\Program Files\Opera.exe";
                const byte __id = 0;
                Delta d = new Delta(__id, ad);
    
                richTextBox1.AppendText(d.ID.ToString());
                richTextBox1.AppendText("\n");
                richTextBox1.AppendText(d.Name);
                richTextBox1.AppendText("\n");
                richTextBox1.AppendText(d.Adress);
                richTextBox1.AppendText("\n");
                richTextBox1.AppendText(Delta.GetPool().ToString());
                richTextBox1.AppendText("\n");
                
            }
    
            private void зАкрытьToolStripMenuItem_Click(object sender, EventArgs e)
            {
                Application.Exit();
            }
    
            private void listBox1_DragEnter(object sender, DragEventArgs e)
            {
                if (e.Data.GetDataPresent(DataFormats.FileDrop))
                    e.Effect = DragDropEffects.Copy;
                else
                    e.Effect = DragDropEffects.None;
            }
    
            private void listBox1_DragDrop(object sender, DragEventArgs e)
            {
                files = e.Data.GetData(DataFormats.FileDrop) as string[];
                var d = new Delta(Delta.GetPool(), files[0]);
                deltases[Delta.GetPool()] = d;
                listBox1.Items.Add(d.Name);
                richTextBox1.Text = d.ID.ToString();
    
    
            }
    
            private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
            {
                //have errors ! ! ! ! ! ! throw to msdn.forum
                for (int i = 0; i < deltases.Length; i++)
                {
                    if (listBox1.SelectedIndex == (int)deltases[i].ID)
                        Process.Start(deltases[i].Adress);
                }
                
            }
    
        }
    }
    

    я пытаюсь по клику на Listbox1 открыть именно тот самый объект дельта который мне нужен.

    ID у всех объектов разные.

    но как перебрать их для сравнения если все объекты автоматический создаваемые мышкой (Mouse Event Args > Drag_Drop) имеют одинаковые имена.

    на данном этапе компилятор выдает Reference null expection

Ответы

  • Использовать вместо массива List или добавить проверку на null.

    for (int i = 0; i < deltases.Length; i++)
                {
                    if (deltases[i] != null && listBox1.SelectedIndex == (int)deltases[i].ID)
                        Process.Start(deltases[i].Adress);
                }

    или

    private List<Delta> deltases = newList<Delta>;

    • Помечено в качестве ответа Medet Tleukabiluly 8 мая 2013 г. 14:38

Все ответы