【问题标题】:Get the co-ordinates of a Form获取表单的坐标
【发布时间】:2011-12-05 01:39:38
【问题描述】:

我想知道,您如何获得表格的坐标?

我有一个当前有一个按钮的应用程序。此按钮随机每 1 秒重新定位一次。但是,我希望此按钮始终在表单内重新定位 - 而不是超出表单的范围。所以,我在想我应该找到表单的边界并使用它来确保按钮始终在表单的边界内。我如何获得表格的高度和宽度?

我有以下代码工作(但用户的屏幕尺寸不是我想要的):

int screenHeight = Screen.PrimaryScreen.WorkingArea.Height;
int screenWidth = Screen.PrimaryScreen.WorkingArea.Width;

这段代码不应该工作吗?

int xPosition = position.X;
int yPosition = position.Y; 
int num = random.Next(screenHeight);
int num1 = random.Next(screenWidth);

Point templocation;
templocation = new Point(num1, num);


ClickMe.Location = templocation;
templocation.X = num1;
templocation.Y = num; 

任何帮助将不胜感激。

PS。我已经查看了这个网站http://msdn.microsoft.com/en-us/library/system.windows.forms.control.resize(v=vs.71).aspx,但是“Control control = (Control)sender;”这一行产生错误...

【问题讨论】:

    标签: c# forms resize height width


    【解决方案1】:

    使用表单的location(类型为Point):

    this.Location
    

    (用这个代替Form1

    还有:

    this.Height
    this.Width
    

    【讨论】:

      【解决方案2】:

      Form.Location 属性为您提供“在屏幕坐标中表示窗体左上角的点。”

      【讨论】:

      • 当我尝试使用它时遇到奇怪的错误......所以我不太确定该怎么做......“错误 1 ​​非静态对象需要对象引用字段、方法或属性 'System.Windows.Forms.Form.Location.get' "
      • @BlueButtons:您不能在代码中编写Form.Location,因为这是访问静态属性(或类属性)的语法。您需要Form 类的实例才能访问此属性。您的代码中已经有一个实例。在表单类中的代码中,您可以通过键入this.Location 来访问属性。从类外的代码中,您需要一个 Form 变量来访问属性 - 例如传递给方法的东西:void foo(Form myForm) { Point location = myForm.Location; }。也许你应该读一本关于面向对象编程的书……
      • 嗯....好吧,我现在明白了。但是,似乎在展开表单时,它没有被检测到?我有一个按钮,我总是希望在表单的范围内重新定位。但是,按钮只是在原始表单大小的范围内移动......我该怎么办?
      【解决方案3】:

      对于宽度和高度,使用

      form.Size.Width
      form.Size.Height
      

      【讨论】:

      • 嗯,我试过这个,但由于某种原因,它没有捕捉到表单的实际大小......
      • 那么它捕捉的是什么?你怎么称呼它?
      【解决方案4】:

      在您更新后,这里是新的答案:

      定位按钮时,您必须确保不要超出表单边界。所以你的按钮的左侧位置介于

      int leftMin = 0;
      int leftMax = myForm.ClientSize.Width - myButton.Width;
      

      至于按钮的顶部位置

      int topMin = 0;
      int topMax = myForm.ClientSize.Height - myButton.Height;
      

      所以对于你的例子:

      private void timer1_Tick(object sender, EventArgs e)
      {
          Random random = new Random();
          int x = random.Next(0, ClientSize.Width - button1.Width);
          int y = random.Next(0, ClientSize.Height - button1.Height);
          button1.Location = new Point(x, y);
      }
      

      旧答案...

      如果您正在寻找当前表单在屏幕上的位置:

      int xPosition = this.Location.X;    
      int yPosition = this.Location.Y;
      

      Point position = this.Location;
      

      虽然在表单构造函数中位置将是“0, 0”。

      【讨论】:

      • 嗯.....我猜这会得到屏幕的初始大小?基本上我有一个定时器可以改变按钮的位置。但我希望按钮始终在表单屏幕大小的范围内。似乎当我使用它时,按钮在表单尺寸扩大之前停留在一般区域......
      • 好的,我真的认为您应该编辑您的原始问题,以准确告诉所有人您想要实现的目标。现在,您似乎在搞乱“表单”、“按钮”、“位置”、“大小”等术语,并且对有关 Windows 表单的 OOP 的工作方式存在深刻的误解......
      • 我不知道发生了什么......如果表格变大..按钮永远不会移动到表格的扩展区域......:S你的答案完全有道理......
      猜你喜欢
      • 1970-01-01
      • 2018-09-27
      • 1970-01-01
      • 1970-01-01
      • 2014-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多