我需要一些帮助动态更改另一个表单上项目的位置。
我正在尝试为我正在制作的应用制作皮肤设计工具,并且需要知道如何将事件从一种形式处理到另一种形式。
我想要做的是在一些文本框中设置一些初始变量并点击预览按钮,这将打开一个新表格并显示皮肤。 然后,我希望能够通过单击第一个表单上的按钮来微调项目的位置。
我可以从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();
但现在我仍然坚持将事件更新到第二种形式。你们有没有想过给我一些指示?
答案 0 :(得分: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();
答案 1 :(得分: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
曝光。