Как назвать 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 (отправитель объекта, событие EventArgs, 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
это работает, спасибо. но мне нужно отправить имя или индекс новой строки в метод. пожалуйста, покажите мне, какой код нужен, если я хочу показать имя новой строки, тег или индекс. (при загрузке формы несколько раз вызовите CreateLine() или CreateBox(). tnx снова. - person user3290286; 10.02.2014