我有以下三种形式:
Form1中
窗体2
Form3
Form1和Form3正在与Form2进行通信。我想如果Form1访问Form2而不是
Form1应将其身份保留为 Form2的textbox1 。如果Form3访问Form2而不是Form3
应将其身份保留为 Form2的textbox2。
有可能吗?。
以下是Visted Means。
按Form1
Form2 f2= new Form2();
f2.Show();
按Form3
Form2 f2= new Form2();
f2.Show();
身份就像“Form1”和“Form3”
答案 0 :(得分:2)
我相信您要求打开Form2的表单为文本框设置一些特定值。您可以在Form2上拥有一个设置文本框文本的属性。
public partial class Form2 : Form
{
/*.......*/
public string Identity
{
set
{
textbox1.Text = value;
}
}
}
然后在Form1或Form3中:
Form2 form2 = new Form2();
form2.Identity = this.Name;
form2.Show();
答案 1 :(得分:1)
要做的最好的事情是为每个表单重载Show
方法,以接受类似“上一个表单”参数的内容,该参数将作为调用者的引用(您可以将此作为Form
对象,然后可以访问其属性,或者仅作为String
)。然后,无论您在现有表单中显示第二个表单,都可以将有关现有表单的信息传递给第二个表单的Show
方法。第二种形式的Show
方法将使用显示它的表单的名称来更新其文本框。
例如,每个表单都包含一个重载的Show
方法:
public void Show(Form previousForm)
{
//Set the textbox on this form to contain the name of the calling form
myTextBox.Text = previousForm.Name;
//Call the base class's method to show this form
base.Show();
}
您可以通过调用其重载的Show
方法来显示另一个表单:
private void ShowOtherFormButton(object sender, EventArgs e)
{
//Create a new instance of the form you want to display
Form2 myOtherForm = new Form2();
//Show the other form, passing the calling form as a parameter
myOtherForm.Show(this);
}
这样,任何表单都不负责甚至不允许更新其他表单包含的控件。您不必公开任何其他属性,或者记得在要显示的表单上调用任何其他方法 - 它内置于您必须调用的Show
方法中。
或者,您可以以相同的方式重载每个表单的构造函数,但如果您希望能够在每个表单的现有实例之间移动,那么这将无效。在为每个表单创建 new 实例时,您只能指定有关上一个表单的信息。
答案 2 :(得分:0)
您需要对来电者的引用。您可以通过覆盖表单的构造函数来完成此操作。
public partial class Form2 : Form
{
Form _caller;//Caller form
//Default constructor
public Form1()
{
InitializeComponent();
}
public Form1(Form caller)
{
InitializeComponent();
this._caller = caller;
textbox2.Text = caller.Name;
}
}
现在你要做的就是使用新的构造函数调用Form2:
Form2 form2Instance = new Form2(this);
form2Instance.Show();
无论哪种形式称为Form2,现在都将其名称写在Form2的textbox2上
答案 3 :(得分:0)
您需要在窗口窗体之间传递数据(即,此方案中的窗体名称),以便您可以在Form2中获取它。 请参阅lint以在窗口窗体之间传递数据:http://www.vbdotnetheaven.com/UploadFile/thiagu304/passdata12262006073406AM/passdata.aspx