0

我需要一些帮助来动态更改项目在另一个表单上的位置。

我正在尝试为我正在制作的应用程序制作皮肤设计工具,并且需要知道如何处理从一种形式到另一种形式的事件。

我想做的是在一些文本框中设置一些初始变量并点击预览按钮,这将打开一个新表单并显示皮肤。然后我希望能够通过单击第一个表单上的按钮来微调项目的位置。

我可以从 form1 获取 form2 上的初始位置,我这样做是这样的。

Form1 form1 = (Form1)Application.OpenForms["Form1"];
int xPos = 0;
int yPos = 0;
if (int.TryParse(form1.textBox1.Text, out xPos))
if (int.TryParse(form1.textBox2.Text, out yPos))
button1.Location = new Point(xPos,yPos);

而我在form1中增加位置的按钮代码就是这个。

Form2 PreviewWindow = new Form2();
int newText;
int xPos = 0;
int yPos = 0;
if (int.TryParse(textBox1.Text, out xPos))
if (int.TryParse(textBox2.Text, out yPos))
PreviewWindow.button1.Location = new Point(xPos + 1 , yPos);
newText = xPos + 1;
textBox1.Text = newText.ToString();

但是现在我坚持将活动更新为第二种形式。你们中的任何人介意给我一些指示吗?

4

2 回答 2

2

第二个代码不起作用,因为您正在创建Form2. 试试这个

Form2 PreviewWindow = (Form2)Application.OpenForms["Form2"];
int newText;
int xPos = 0;
int yPos = 0;
if (int.TryParse(textBox1.Text, out xPos))
if (int.TryParse(textBox2.Text, out yPos))
PreviewWindow.button1.Location = new Point(xPos + 1 , yPos);
newText = xPos + 1;
textBox1.Text = newText.ToString();
于 2013-09-26T12:20:29.130 回答
0

您最好的选择是以您希望控制的形式公开属性和/或方法。例如,对于一个TextBox职位:

//Property option:
public Int32 TextBox1XPos
{
    get
    {
        return textBox1.Location.X;
    }
    set
    {
        textBox1.Location.X = value;
    }
}

public Int32 TextBox1YPos
{
    get
    {
        return textBox1.Location.Y;
    }
    set
    {
        textBox1.Location.Y = value;
    }
}

//Method option
public void MoveTextBox1(Int32 XPos, Int32 YPos)
{
    textBox1.Location = new Point(XPos, YPos);
}

您可以为表单上的任何属性实现这些。这为您提供了与表单进行通信的间接方式,并且不需要将所有控件设置为Public公开。

于 2013-09-26T11:13:41.427 回答