Как да именувате ShapeContainer по време на изпълнение

опитвам се да направя приложение, което чертае мрежова карта, използвам панел във форма и в този панел, създаден динамично ShapeContainer като платно.

в това платно създавам някаква форма и линия динамично (за създаване на тези форми използвам два метода)

за форма на линия:

private void CreateLine(int StartX,int StartY,int EndX,int EndY,Color lineColor,String ControlName)
    {

        LineShape newline = new LineShape();
        canvas.Parent = panMap;
        newline.Parent = canvas;
        newline.StartPoint = new Point(StartX+ZoomScale , StartY+ZoomScale );
        newline.EndPoint = new Point(EndX + ZoomScale, EndY + ZoomScale);
        newline.BorderColor = lineColor;
        newline.BorderWidth = 2;
        newline.BorderStyle = System.Drawing.Drawing2D.DashStyle.Solid;
        newline.Name = "Link_" + ControlName;
        newline.Tag = "Link_" + ControlName;
        newline.BringToFront();
        canvas.Shapes.Add(newline);


    }

и за създаване на правоъгълник правя този метод:

private void CreateBox(int X, int Y, int ObjectType)
    {
        ShapeContainer canvas = new ShapeContainer();
        RectangleShape box = new RectangleShape();
        box.Parent = canvas;
        box.Size = new System.Drawing.Size(100, 90);
        box.Location = new System.Drawing.Point(X, Y);
        box.Name = "Box" + ObjectType.ToString();
        box.BackColor = Color.Transparent;
        box.BorderColor = Color.Transparent;
        box.BackgroundImage = img.Images[ObjectType];
        box.BackgroundImageLayout = ImageLayout.Stretch;
        box.BorderWidth = 0;


    }

наричам тези методи така:

        CreateBox(600, 160, 4);
        CreateBox(600, 200, 3);

        CreateLine(75, 83, 227, 176, Color.Green, "1");
        CreateLine(227, 176, 367, 95, Color.Green, "2");

---- сега имам някакъв проблем: 1. как да задам име за тази форма (за използване в друг метод)? например в контрола на текстовото поле използвам това:

TextBox txtbx = (TextBox)Controls["txtCityName"];

какво мога да направя за формата?

  1. как да създадете метод за тази форма? например :

    newline.Click += newliclick(object sender,EventArgs event,Color linecolor) !?

искам да изпратя повече от 1 обект към метод

извинете ме за дългия въпрос и съжалявам, ако не мога да опиша въпроса си (английският ми език не е добре).


person user3290286    schedule 09.02.2014    source източник


Отговори (1)


Възможно е, но не е така. Сигнатурата на вашия метод трябва да съвпада с манипулатора на събитие. Можете да създадете клас, като наследите от EventArgs, но изглежда ненужно в този случай.

Както и да е, просто дефинирайте метод за манипулатор на събития и друг метод, който да върши вашата работа, който приема Color параметър. Вътре във вашето кликване извикайте другия си метод и предайте Color параметър. Например:

newline.Click += newlineClick;

private void newlineClick(object sender, EventArgs e)
{
    newlineClickImpl(sender,e, Color.Blue);
}

private void  newlineClickImpl(object sender, EventArgs e,Color color)
{
    ...
}
person Selman Genç    schedule 09.02.2014
comment
работи, tnx. но трябва да изпратя име или индекс на нов ред към метода. моля, покажете ми какъв код е необходим, ако искам да показвам име, етикет или индекс на нов ред. (при зареждане на формуляр извикайте CreateLine() или CreateBox() няколко пъти. tnx отново. - person user3290286; 10.02.2014