private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
pen= new Pen(Color.FromArgb(127, _colorvalue[0], _colorvalue[1], _colorvalue[2]), 1.0f);
//使用以下语句画点时
e.Graphics.DrawEllipse(pen, pp.X, pp.Y, 1.0f, 1.0f);//报参数无效
}
不知道为何?请高手明示!
注:PP为PointF类型,colorvalue数组为0-255的随机值

解决方案 »

  1.   

    .Graphics.DrawEllipse(pen, pp.X, pp.Y, 1.0f, 1.0f);//报参数无效
    就这一行好像是pen的参数无效。
    pen= new Pen(Color.FromArgb(127, _colorvalue[0], _colorvalue[1], _colorvalue[2]), 1.0f); 
    加断点,单步,提示pen的参数也没什么问题啊,不知为何?
      

  2.   

    建议,在pen= new Pen(Color.FromArgb(127, _colorvalue[0], _colorvalue[1], _colorvalue[2]), 1.0f); 后检查一下pen是否实例化成功
    再检查一下pp点是不是在pictruebox1的矩形范围内
      

  3.   

    可以画啊,把pen改换成pen=new pen(color.red,1);调试就没有问题,可以画出来.所以不知道为什么?
      

  4.   

    你的colorvalue真的是0到255之间的值吗?这个colorvalue是怎么得到的,能不能写上来?
      

  5.   

    Random类有生成随机数的方法:
    Random random = new Random();
    pen= new Pen(Color.FromArgb(127, random.Next(255), random.Next(255), random.Next(255)), 1.0f);
    改成这样应该没问题。
      

  6.   

    Lz你看我下面这段代码是能够执行的,并且能画出椭圆来using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        private void pictureBox1_Paint(object sender, PaintEventArgs e)
            {
                Pen pen = new Pen(Color.FromArgb(127, 100,100, 100), 1.0f);
                //使用以下语句画点时 
                Point pp = new Point(50,50);
                e.Graphics.DrawEllipse(pen ,pp.X ,pp.Y ,20,30);
                         }
        }
    }
    为什么你的不能执行呢?
    可能原因有集中
    1.pen对象是全局对象吗?
    2.你的pp是在这个pictureBox中的吗?这个原因比较大,建议你换在这个Paint事件里来声明pp
    3.你在给这个pen中的哪些颜色值是在范围0--255并且也是全局的吗?
      

  7.   

    看了哈你的代码,你把椭圆的高和宽都设置为1f,那么小,你要看什么呀?
    看了你的代码,我修改哈我的代码,希望对你有帮组:using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            Point pp = new Point(50, 50);
            Pen pen;
            int[] color = new int[] { 100, 120, 130 };
            public Form1()
            {
                InitializeComponent();
            }        private void pictureBox1_Paint(object sender, PaintEventArgs e)
            {
                pen = new Pen(Color.FromArgb(127,color [0],color [1],color [2]), 1.0f);
                //使用以下语句画点时 
                e.Graphics.DrawEllipse(pen ,pp.X ,pp.Y ,20,30);//此时这个PP是相对于PictureBox的值
                         }
        }
    }
      

  8.   

    以前遇到过brush的,和你一样的报错,好像跟变量有关系,你把pen拿出来做全局定义好,画的时候只要改变pen的颜色属性就行了,每次new一个pen会死人的,这样改应该就没问题了
      

  9.   

    楼主的问题是编译不行,不是画的东西显示不显示的问题,因此对xy是否在pic中无关。按.Graphics.DrawEllipse的参数类型,检查下你给定的每个参数pp.Xy等到底是否是int还是float还有pen的宽
      

  10.   


    也就是说下面这样就可以画出来,对吗?
    pen=new pen(color.red,1);
    e.Graphics.DrawEllipse(pen, pp.X, pp.Y, 1.0f, 1.0f);如果上面可以画出来,那就应该是你颜色参数分配有问题啊;
    _colorvalue[0], _colorvalue[1], _colorvalue[2],问题应该就在你这三个参数里;
      

  11.   

                Random rd = new Random();
                Pen pen = new Pen(this.BackColor, 10);
                Point pp = new Point(rd.Next(255),rd.Next(255));
                pen = new Pen(Color.FromArgb(127, _colorvalue[0], _colorvalue[1], _colorvalue[2]), 1.0f);
                e.Graphics.DrawEllipse(pen, pp.X, pp.Y, 1.0f, 1.0f);这样的应该就好了~~
      

  12.   

    谢谢,楼上各位的解答。祝大家元旦快乐!
    我是在picturebox的paint中画点,后该在一函数中使用
    gc = Graphics.FromImage(picturebox1.Image)对象来画点的。
    生成颜色函数:
     private int[] GetColorValue(int[] colorvalue)
            {
                for (int i = 0; i < 3; i++)
                {
                    colorvalue[i] = Rnd.Next(0, 255);//Rnd为random的实例对象
                }
                return colorvalue;
            } 
    采用随机数生成的一个画笔的值如下:
    base {System.MarshalByRefObject} = {Color = {Color [A=127, R=17, G=56, B=153]}} 
    pp的值如下://PointF pp = new PointF();
    pp = {X = 11.5847111 Y = 387.09552}正如tianliang1所言这个代码在别的工程中可以正常运行,转移到新的工程中编译没有问题,运行调试时提示参数无效,郁闷中