我有一个主Windows窗体(From1
),其中包含TextBox
。我还创建了另一个Windows窗体(FindReplaceForm
),我将用它来实现一种查找和替换对话框。我需要在FindReplaceForm
窗口的From1中完全访问我的文本框的所有属性和方法。
答案 0 :(得分:3)
您需要将对控件或表单的引用传递给构造函数,以便可以引用该类的实例。将与调用表单相同类型的参数添加到构造函数:
private Form1 calling_form;
public FindReplaceForm (Form1 calling_form)
{
this.InitializeComponent()
this.calling_form = calling_form;
}
然后在按钮通话中,您可以说:
calling_form.TextBox_value_text.SelectedText = "";
答案 1 :(得分:1)
您可以使用以下方式访问孩子的所有者表单:
((Form1)Owner).textBox1.Text = "blah";
假设您使用以下方式调用了您的子表单:
Form2 form = new Form2();
form.Show(this);
答案 2 :(得分:0)
即使您将文本框访问修饰符设置回private
,您也可以简单地将引用传递给第二种形式的构造函数中的textbox
,从而启用第二种形式的操作文本框的属性:
第一种形式:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 frm = new Form2(this.textBox1);
frm.Show();
}
}
第二种形式:
public partial class Form2 : Form
{
private TextBox _OwnerTextBox;
public Form2(TextBox ownerTextBox)
{
InitializeComponent();
_OwnerTextBox = ownerTextBox;
this.textBox1.Text = _OwnerTextBox.Text;
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
_OwnerTextBox.Text = this.textBox1.Text;
}
}
答案 3 :(得分:0)
在您的代码中,Form1
是CLASS,而不是变量。当您显示FindReplaceForm
时,您应指定所有者(只需使用this
)。
现在,您可以Owner
上的FindReplaceForm
属性访问Form1。
显示FindReplaceForm
:
FindReplaceForm.Show(this);
在按钮点击事件中:
void Buttton1_Click(object sender, EventArgs e)
{
((Form1)this.Owner).TextBox_value_text.SelectedText = "";
}

答案 4 :(得分:0)
在FindReplaceForm.button1_Click函数中,您想要控制类Form1的对象。代码中的错误说明您不调用Form1类对象的函数,而是调用Form1类本身的函数。后者只能在静态函数上完成
您描述了您有一个现有的Form1对象,并且您的FindReplaceForm需要通过调用Form1中的函数来更改Form1。可能有超过1个Form1对象。因此,您的FindReplaceForm实例需要知道它需要控制哪个Form1对象。有人需要告诉你的FindReplaceForm。这通常使用FindReplaceForm的构造函数或使用属性来完成。
public class FindReplaceForm
{
private Form1 formToControl = null;
public FindReplaceForm(Form1 formToControl)
{
this.formToControl = formToControl;
}
private void OnButton1_Click(...)
{
this.formToControl.TextBox_Value_Text.SelectedText = ...
}
另一种方法是不将formToControl放在构造函数中,而是作为可以单独设置的属性。这两种方法都有其优点: