Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.11.2014, 22:51   #1
Тамерлан Абилов
Пользователь
 
Регистрация: 03.03.2013
Сообщений: 70
По умолчанию C# Передача параметров

Подскажите пожалуйста,что нужно сделать чтобы не делать так:

Код:
    public Edge(Vertex StartVertex, Vertex EndVertex)
      {
          startV = StartVertex; endV = EndVertex;
          StartVertex.outEdge[EndVertex.Number] = this;
          EndVertex.enterEdge[StartVertex.Number] = this;
      }
В ВинФорм у меня массив Вершин(Объект).а передать сюда не только объект,но и его индекс не получится обычным образом.Я задаю полу Number,и для каждой вершины в коде мейн задаю Vertex[i].Number=i а потом так вот пользуюсь.Возможно по корректнее сделать вот это?



Код:
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;
namespace WindowsFormsApplication1
{
    public class Vertex : Button
    {
    


        Point DownPoint=new Point();
        bool IsDragMode;
       public byte Number;

        public Edge[] outEdge = new Edge[19];

        public Edge[] enterEdge = new Edge[19];
       protected override void OnMouseDown(MouseEventArgs mevent)
       {
             DownPoint = mevent.Location;
            IsDragMode = true;
            base.OnMouseDown(mevent); 
       

       }

       protected override void OnMouseUp(MouseEventArgs mevent)
       {
        
           IsDragMode = false; ;
           base.OnMouseUp(mevent);
       }

       protected override void OnMouseMove(MouseEventArgs mevent)
       {
           if (IsDragMode)
           {

               Point p =   mevent.Location;
               Point dp = new Point(p.X - DownPoint.X, p.Y - DownPoint.Y);
               base.Location = new Point(Location.X + dp.X, Location.Y + dp.Y);

               for (int i = 0; i < 19; i++)
               {
                   if (outEdge[i] != null)
                   {
                       outEdge[i].stPosition = base.Location;
                   }
                   if (enterEdge[i] != null)
                   {
                       enterEdge[i].endPosition = base.Location;
                   }
               }
               
           }


           base.OnMouseMove(mevent);
       }
        

     
    }


   public class Edge
    {

       public int weight;
       public Point endPosition = new Point();
       public Point stPosition = new Point();

      public Vertex startV, endV;
      public Edge(Vertex StartVertex, Vertex EndVertex)
      {
          startV = StartVertex; endV = EndVertex;
          StartVertex.outEdge[EndVertex.Number] = this;
          EndVertex.enterEdge[StartVertex.Number] = this;
          

          
          
      }

 
      

    }
}

вот сам класс.

Код:
 for (byte i=0;i<3;i++)
            {
            V[i] = new Vertex();
            pictureBox1.Controls.Add(V[i]);
            V[i].Number = i;
            V[i].Location = new Point(50*(i+1), 50*(i+1));
            V[i].Text = Convert.ToString(i);
            }


            E[2, 1] = new Edge(V[2], V[1]);
            E[0, 1] = new Edge(V[0],V[1]);
        }
если кому нужен код.и дело в том что я хочу инициализировать Vertex-OutEdge,enterEdge от самого Edge(после инициализации...).Т.к. входное ребро не одно ,нужно знать точный номер этого ребра.Нашаманил только вот передача индекса невозможна.как быть дайте совет((

Последний раз редактировалось Stilet; 09.11.2014 в 10:15.
Тамерлан Абилов вне форума Ответить с цитированием
Старый 09.11.2014, 00:11   #2
Тамерлан Абилов
Пользователь
 
Регистрация: 03.03.2013
Сообщений: 70
По умолчанию

Если смогу как нибудь учитывать индексы тогда мне не придется писать такое
Код:
E[2, 1] = new Edge(V[2], V[1]);

E[2, 1] = new Edge(); //так будет легче намного
Кто нибудь объясните пожалуйста как быть
Тамерлан Абилов вне форума Ответить с цитированием
Старый 09.11.2014, 10:18   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Что-то я ниразу не пойму что ты хочешь и что не получается...
Если проблема в том чтоб не писать в коде лишних букаф то сделай метод, который будет присваивать массиву. Что-то типа
Код:
 блабла(int i;int j){E[i, j] = new Edge(V[i], V[j]);}
И его вызывай.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.11.2014, 11:29   #4
Тамерлан Абилов
Пользователь
 
Регистрация: 03.03.2013
Сообщений: 70
По умолчанию

Да извини за путаницу.


Код:
E[2, 1] = new Edge(V[2], V[1]);
Вот тут.Я хочу чтобы класс Эдж понимал о каком индексе идет речь.В классе Эдж нету понятие 2 мерного массива...Т.е. если я получу значение (2,1) то не будет необходимости указывать какими вершинами соединено это ребро) сори за объяснения.не дано)
Тамерлан Абилов вне форума Ответить с цитированием
Старый 09.11.2014, 12:04   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Извини, но я не понимаю зачем конструктору знать в какую ячейку массива его помещают.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.11.2014, 20:08   #6
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,876
По умолчанию

Вы хотите странного.
Но если сильно хотите, то можно вот такой костыль сделать, после формирования всего массива написать такой код
Код:
for (int y = 0; y < ...; y++)
for (int x = 0; x < ...; x++)
E[y, x].Setup(y, x);
в методе Setup сделать то, что делаете в конструкторе (сейчас).
Тогда не надо на каждое присвоение писать индексы, только один раз в конце.
phomm вне форума Ответить с цитированием
Старый 09.11.2014, 23:05   #7
Тамерлан Абилов
Пользователь
 
Регистрация: 03.03.2013
Сообщений: 70
По умолчанию

да я так и сделал) да вот же
Код:
V[i].Number = i;
наоборот хочу обойтись без этого)
Тогда я должен использовать индексаторы.
Или если я хочу странного.как мне использовать ячейки в вин форме чтобы не использовать намбер..
Тамерлан Абилов вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача параметров _Mixer_ Общие вопросы по Java, Java SE, Kotlin 0 22.09.2011 20:17
Передача параметров в браузер mrbadge Общие вопросы Delphi 0 21.02.2011 10:13
Передача параметров в DLL -Flasher- Общие вопросы Delphi 2 04.06.2010 18:05
Передача параметров aesoem Общие вопросы Delphi 8 15.07.2008 21:51
Передача параметров Gudzon Общие вопросы Delphi 12 08.02.2007 08:19