比如:
private void Form1_Load(object sender, EventArgs e)
  {
     Point point1 = new Point(0,0);
  }
private void button1_Paint(object sender, PaintEventArgs e)
  {
     Point point2 = new Point(0, 0);
  }
 private void button1_Click(object sender, EventArgs e)
  {
     Point point3 = new Point(0, 0);
  }请问,上面的point1、point2、point3的坐标哪些是屏幕坐标、哪些是工作区坐标
同样的代码,什么时候是屏幕坐标、什么时候是工作区坐标?
MSDN上没说呢?

解决方案 »

  1.   

    屏幕坐标一种坐标,其 X 和 Y 屏幕位置是相对于屏幕的左上角(将该左上角当作原点 (0,0))指定的。Client Coordinates - 工作区坐标一种坐标,其 X 和 Y 屏幕位置是相对于应用程序的左上角(将该左上角当作原点 (0,0))指定的。在从右向左 (RTL) 的应用程序中,右上角为原点。
      

  2.   

    请问上面的point2是屏幕坐标,还是工作区坐标?为什么?
      

  3.   

    请问上面的point2是屏幕坐标,还是工作区坐标?为什么?
      Point 本身是没办法表示是屏幕坐标还是工作区坐标,但使用是有区别,如把次Point 赋值给form或者其他控件则是工作区坐标,也就是是说,大部分的控件的属性都是工作区坐标
      

  4.   

    Point本身是个点,没有坐标的概念。
    MouseClick(sender, MouseClickEvent e)
    {
    //相对于控件的坐标
    Point p = new Point(e.x,e.y);
    }
    Form_paint(object sender, PaintEventArgs e)
    {
    //相对于Form坐标
    e.Graphics.DrawLine(new Point(0, 0),new Point(100,100);
    //相对于屏幕坐标
                Point p = System.Windows.Forms.Control.MousePosition;
    //转化为相对于Form的坐标
                Point p2 = this.PointToClient(p);
    //转化为相对Button的坐标
    Point p3 = this.btn1.PointToClient(p);}
      

  5.   

    同意5楼,Point是个点,其本身没有坐标的概念。关键是看你怎么用。还有你说的屏幕坐标指的是窗口坐标吗,工作区坐标是不是某个控件呢?如果是这样的话可以这么去理解:
    比方说你需要移动某个控件的位置,如一个Button,那这个肯定是相对整个窗口的坐标,
    再比方说你需要在某个控件上画图,那肯定是这个控件自身的坐标。
      

  6.   

    窗体坐标:http://msdn.microsoft.com/zh-cn/library/ms229598.aspx
    好,窗体坐标,就暂时不说
    说说工作区坐标(包括窗口坐标)
    我就想问,比如,窗口中,有button、label
    那同样是一句代码:Point point1 = new Point();
    point的坐标,什么时候是对于窗口的坐标,什么时候是对于button的坐标,什么时候是相对于label的坐标
    有什么游戏规则吗?就如问题中的三个点一样
      

  7.   

    说千遍不如做一遍。
    做个验证的例子:你只可以这个,生成一个graphic.
    在上边画个矩形,找一下位置,就知道坐标系统 的情况 了。Graphics g = this.CreateGRaphic();g.Rectangle(0,0,100,100);
    ....
    PointTo..
    ScrentTo...
    LpToDP
    DpToLO
      

  8.   

    请问
    private void button1_Paint(object sender, PaintEventArgs e)
      {
      Point point2 = new Point(0, 0);
      }point2的坐标是相对于form而言,还是button1而言的?为什么?
      

  9.   

    你的问题问得不对啊,就像我告诉你有三个人:
    张三 李四 王五
    不告诉他们的出生地,却要你说出他们的原籍一样我只能告诉 对象的鼠标事件所产生的坐标都是该对象的坐标
    用 Control.PointToScreen 可转换为屏幕坐标三种常用的直接获取屏幕坐标的方法:
    System.Windows.Forms.Form.MousePosition
    System.Windows.Forms.Cursor.Position
    WinAPI GetCursorPos(ref System.Drawing.Point pt)
    然后通过 Control.PointToClient 可转换为控件坐标
      

  10.   


    都不是,这是你自己定义的一个 Point,只是一个单纯的结构对象。
    将其应用到哪个对象 它就属于哪个对象如果你问的是 button1_MouseMove(object sender, MouseEventArgs e) 事件中的
    Point point2 = e.Location;
    我倒是可以回答你这个 point2 属于 button1
      

  11.   

    那阁下的意思:
    private void button1_Paint(object sender, PaintEventArgs e)
      {
      Point point2 = new Point(0, 0);
      }point2的坐标还不能确定是相对于谁的,是吗?这个point2已经new出来了,那就说明已经创建了,不可能还不知道是相对于谁的坐标吧?
      

  12.   


    没有给 Point 指定容器前 谁能回答你的问题呢,如果有答案,那必定是错误的请问 奥巴马 是那个国家的? 如果你说是美国的
    那我告诉你 我的狗也叫奥巴马
      

  13.   

      Point point1 = new Point(50,50);   
      Label labe11 = new Label();
      labe11.Location = point1;
      labe11.BackColor = Color.Red;
      this.Controls.Add(labe11);  
      labe11 = new Label();
      labe11.Location = point1;
      labe11.BackColor = Color.Red;
      panel1.Controls.Add(labe11);
    Point1的坐标值的参照物不一样,应该怎么用比较规范的语言来归纳一下规则呢?
      

  14.   

    某个控件的point以他所在容器为准
      

  15.   


    int[] nums = new int[10];Random rd = new Random(); // 随机数for (int i = 0; i < nums.Length; i++)
    {
        nums[i] = rd.Next(100); // 赋值
    }// 输出原始数组
    Console.WriteLine(string.Join(" ", nums));// 计时
    Stopwatch time = new Stopwatch();
    time.Start();for (int i = 0; i < nums.Length; i++)
    {
        int Max = i;    for (int j = i + 1; j < nums.Length; j++)
        {
            if (nums[j] > nums[Max]) Max = j;
            
            // 原先 还没有取得最大值就开始交换了
        }    int temp = nums[Max];
        nums[Max] = nums[i];
        nums[i] = temp;
    }time.Stop();Console.WriteLine(string.Join(" ", nums));
    Console.WriteLine("选择排序共计运行:" + time.Elapsed + "秒");