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 точек, он выдаст параметр недопустимой ошибки.
Убедитесь, что в вашем массиве больше точек, чтобы нарисовать линии.