Graphics.DrawLines: параметр недействителен

Для этой проблемы я прочесал через Stackru похожие вопросы для ответа. Хотя многие из них были полезны, они не решили мою проблему. Моя программа рисует многоугольник на winform, используя метод graphics.DrawLines следующим образом.

g.DrawLines(thepen,pts);

Но это продолжает расти, "Параметр не действителен", ошибка. Итак, я изменил эту строку кода следующим образом, чтобы увидеть, если это имеет какое-либо значение.

g.DrawLines(new pen(color.Black),pts);

Опять же, это поднимает ту же ошибку. pts - это массив system.drawing.point, а thepen - это system.drawing.pen.

Если я полностью закомментирую это, у моей программы не будет проблемы, которая не вызовет никаких ошибок. Однако странно то, что один и тот же код работал нормально в течение последних 3-4 месяцев. Со вчерашнего дня я не могу заставить его работать снова.

Есть ли настройка свойства для winform, которая должна быть установлена?

ОБНОВЛЕНИЕ Вот фактический метод рисования

method TMakerPoly.Draw;
var
  pts: Array of point;
  i:integer;
  theBrush1:HatchBrush;
  theBrush2:SolidBrush;
begin
  if (theBrushStyle = HatchStyle.Wave) then
     theBrush1 := new HatchBrush(theBrushStyle,Color.Transparent,color.Transparent)
  else if (theBrushStyle = HatchStyle.ZigZag) then
     thebrush2 := new SolidBrush(FillColor)
  else
     theBrush1 := new HatchBrush(theBrushStyle,FillColor,color.Transparent);

  if (thePen.DashStyle = DashStyle.Custom) then
    thepen.Color := Color.Transparent;

  pts := new point[pcount];

  if pcount >= 2 then
  begin
    if Active then
    begin
      for i := 0 to pcount-1 do
        pts[i] := point(points[i]);
      Translate(var pts,pcount);

      thepen.Color := EdgeColor(thepen.Color);
      fillColor := self.BackColor(FillColor);
      if visible then
      begin
        if filled then
        begin
            if theBrushStyle = HatchStyle.ZigZag then
                g.FillPolygon(theBrush2,pts)
            else 
                g.FillPolygon(thebrush1,pts);

            g.DrawPolygon(thepen, pts);
        end
        else
            g.DrawLines(thePen, pts);
      end;
    end
    else
    begin
      for i := 0 to pcount-1 do
        pts[i] := point(points[i]);

      if filled then
      begin
            if theBrushStyle = HatchStyle.ZigZag then
                g.FillPolygon(theBrush2,pts)
            else 
                g.FillPolygon(thebrush1,pts);

            g.DrawPolygon(thepen,pts);        
      end
      else
        g.DrawLines(new Pen(color.Black),pts);
    end;
  end;
end;

Любая помощь или советы или подсказки будут с благодарностью.

1 ответ

Решение

Если ваш массив pts имеет менее 2 точек, он выдаст параметр недопустимой ошибки.

Убедитесь, что в вашем массиве больше точек, чтобы нарисовать линии.

Другие вопросы по тегам