c#中不同窗体中控件互访问题

2024-12-13 21:01:54
推荐回答(6个)
回答1:

可以访问。前提是你要把引用传递过去。例如form1访问form2,那么在,在form1里声明一个form2类型的局部变量,在form1构造的时候,或者在主程序里,把from2赋值给from1里的变量,这样就可以在form1里访问form2里的函数了。不过,你直接访问控件可能不行,因为控件是private的,你可以在from2里写一个public的方法,然后在此方法里对控件属性进行修改。在form1里调用这个方法即可。

回答2:

//你试一下!
class Form1 : Form
{
public TextBox textbox /*写一个public属性,可在其他窗体访问textBox1 ,当然你也可以直接把 textBox1 设置为 public */
{
get{return textBox1;}
set{textBox1=value;}
}
private void FormMain_Load(object sender, EventArgs e)
{
textBox1.Text="";
}
private void Button1_Click(object sender, EventArgs e)
{
Form2 Frm2=new Form2();
Frm2.Frm1=this;
Frm2.Show();
}
}

class Form2 : Form
{
public Form1 Frm1;
private void Button1_Click(object sender, EventArgs e)
{
Frm1.textbox.Text="aaaaaaaa";
}
}

回答3:

是Form,不是From,兄弟。因为控件是私有的,所以你要去desiger那里把private改成public。然后你在form1声明一个public static Form1 C;再在
public form
{

C=this; //把form1赋给C,这样你就可以在Form2中利用

} Form1.C.textBox1.text;前提是你得把textBox1的属性改成
public.在form1调用form2的控件属性也一样。兄弟,希望我的
答案你能满意

回答4:

背景:窗体Form1和Form2 Form2由Form1打开(1、模式窗体 2、非模式)
要求:Form2的TextBox值传回Form1的TextBox中
方法:
情况一:(模式窗体)Form1 .ShowDialog()打开Form2

view plaincopy to clipboardprint?
Form1:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
Form2 frm = new Form2(this,textBox1.Text);//带参数构造Form2(此方法该处带俩参数构造多余)

if (frm.ShowDialog() == DialogResult.OK)
{
this.textBox1.Text += frm.ReturnText;//通过Form2的属性获得回传值
}
frm = null;

}

Form2:
public partial class Form2 : Form
{
private Form1 pfrm;
private string frm1txt;
public Form2(Form1 parentfrm,string frm1text)
{
InitializeComponent();
pfrm = parentfrm;
frm1txt = frm1text;
}
public string ReturnText//回传值的属性
{
get { return this.frm1txt; }
}
private void button2_Click(object sender, EventArgs e)//给属性赋值并关闭模式窗体Form2
{
frm1txt = this.textBox2.Text;
this.DialogResult = DialogResult.OK;//*必加 模式窗体打开后 只有DialogResult初始化后才可继续操作 否则值无法传回
this.Close();//模式窗体关闭.close()相当于将窗体隐藏 彻底关闭需要用.Dispose()
}

private void button3_Click(object sender, EventArgs e)//关闭
{
this.DialogResult = DialogResult.Cancel;//同*
this.Close();
}
Form1:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
Form2 frm = new Form2(this,textBox1.Text);//带参数构造Form2(此方法该处带俩参数构造多余)

if (frm.ShowDialog() == DialogResult.OK)
{
this.textBox1.Text += frm.ReturnText;//通过Form2的属性获得回传值
}
frm = null;

}

Form2:
public partial class Form2 : Form
{
private Form1 pfrm;
private string frm1txt;
public Form2(Form1 parentfrm,string frm1text)
{
InitializeComponent();
pfrm = parentfrm;
frm1txt = frm1text;
}
public string ReturnText//回传值的属性
{
get { return this.frm1txt; }
}
private void button2_Click(object sender, EventArgs e)//给属性赋值并关闭模式窗体Form2
{
frm1txt = this.textBox2.Text;
this.DialogResult = DialogResult.OK;//*必加 模式窗体打开后 只有DialogResult初始化后才可继续操作 否则值无法传回
this.Close();//模式窗体关闭.close()相当于将窗体隐藏 彻底关闭需要用.Dispose()
}

private void button3_Click(object sender, EventArgs e)//关闭
{
this.DialogResult = DialogResult.Cancel;//同*
this.Close();
}

情况二:(非模式窗体)Form1 .Show()打开Form2

view plaincopy to clipboardprint?
Form1:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
Form2 frm = new Form2(this,textBox1.Text); //带参数构造Form2(此处参数1必须,参数2多余 参数2作用为将Form1的值传递到Form2)
frm.Show();
}
public void ChangeText(string str)//获得Form2回传过来的值
{
this.textBox1.Text += str;
}
}

Form2:
public partial class Form2 : Form
{
private Form1 pfrm;
private string frm1txt;
public Form2(Form1 parentfrm,string frm1text)
{
InitializeComponent();
pfrm = parentfrm;
frm1txt = frm1text;
}
}
private void button1_Click(object sender, EventArgs e)
{
pfrm.ChangeText(this.textBox2.Text);//调用Form1的方法
}
private void button4_Click(object sender, EventArgs e)
{
pfrm.textBox1.Text += "sdfsdfsd";//或直接访问Form1的控件

}

回答5:

需要在主程序中调用。

回答6:

属性