2014-02-09 3 views
1

Я пытаюсь сделать приложение, которое рисует сетевую карту Я использую панель в форме и в эту панель динамически создавал 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, цвет linecolor)!?

я хочу послать больше чем 1 объект метода

извините за длинный вопрос и извините, если я не могу описать свой вопрос (мой английский язык не так).

ответ

1

Это возможно, но не так. Ваша подпись метода должна соответствовать обработчику событий. Вы можете создать класс, наследуя от EventArgs, но в этом случае он кажется лишним.

В любом случае, просто определить метод обработчика событий и другой способ, чтобы сделать свою работу, которая принимает Color parameter.Inside Вашего события щелчка вызвать ваш другой метод и передать Color parameter.For пример:

newline.Click += newlineClick; 

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

private void newlineClickImpl(object sender, EventArgs e,Color color) 
{ 
    ... 
} 
+1

его работы , tnx столько друг. – user3290286

+0

это работа, tnx. но мне нужно отправить имя или индекс новой строки в метод. пожалуйста, покажите мне, какой код нужен, если я хочу показать имя новой строки, тег или индекс. (в форме load call CreateLine() или CreateBox() несколько раз. tnx снова. – user3290286

Смежные вопросы