winform有个主窗口,点击上面一个按钮弹出一个副窗口,通过点击副窗口上的一个按钮 来改变主窗口的背景颜色,代码如下:
主窗口:
namespace WindowsFormsCouleur { public partial class Form1 : Form { public Form1() { InitializeComponent(); }
...
//主窗口上有个按钮,下面是点击弹出副窗口 private void boutonRadioToolStripMenuItem_Click(object sender, EventArgs e) { Bouton_radio a1 = new Bouton_radio(this); a1.ShowDialog(); }
以上是主窗口,点击按钮,创建一个新的副窗口类,名为:Bouton_radio ,下面是副窗口代码:
namespace WindowsFormsCouleur{ public partial class Bouton_radio : Form { Form1 fenetre1; public Bouton_radio(Form1 fenetre) { InitializeComponent(); fenetre1 = fenetre; } private void radioButton1_CheckedChanged(object sender, EventArgs e) { fenetre1.BackColor = Color.Red; }
...
就是上面这些代码(主要是主窗口的this,还有副窗口的代码是问题所在,是我不懂的地方)
请教各位大虾,为什么可以通过这个程序控制主窗口的背景颜色,那个this是什么作用?我知道this定义,但不知道这儿的用法;还有副窗口的fenetre1和 fenetre什么关系,怎么做到副窗口控制主窗口的颜色的,这里面的逻辑关系式什么?讲解越详细越好,谢谢各位先,这个问题困扰我好久了
建议楼主随便买本程序语言入门书籍慢慢认真阅读。
因为fenetre1.BackColor = Color.Red;这个代码。
this是个变量。
fenetre1是全局变量,fenetre是局部变量。
因为已经将主窗口传给了副窗口,并保存为fenetre1。
所以fenetre1就是主窗口,只要操作fenetre1就是操作主窗口。
帅哥,你回答的就没在点子上啊,回答1,我也能看懂是改变背景颜色,回答2,this不但是变量,而且还是代表当前创建的对象的一个变量。回答3,不明白想说什么。回答4,理论我也懂,怎么对应到代码。。。
@v03051435: 上面的解释是对的。稍微做一下补充:
2 this的位置是主窗体内,写在一个类内的this代表这个类本身的引用,因此这个this是主窗体的引用。
3 fenetre是参数名,在实际创建对象时赋值为this,即主窗体的引用
4 fenetre1=fenetre,实际上fenetre1也就是主窗体的引用
@碧落星痕:
谢谢你的回答,不过我不明白副窗口中
public Bouton_radio(Form1 fenetre) { InitializeComponent(); fenetre1 = fenetre; }
public Bouton_radio(Form1 fenetre) 这行构造函数的代码,其中的fenetre在生成实例的时候就自动赋值为主窗口的引用吧?fenetre既然已经是主窗口了,那么直接fenetre.BackColor = Color.Red;不就行了嘛?为什么还要先赋值给fenetre1,然后再改变fenetre1的背景呢?
@v03051435: 因为你在单击事件的时候,才传过去的主窗体的引用。也就是在单击这个事件的参数里,才有主窗体,需要在这个事件里,把主窗体的引用赋给副窗体,不然这个方法结束后,你副窗体就丢失了主窗的引用,你也就无法操纵父窗体的颜色了。
你的代码我只是大概看了一下,如果哪不对,你再回复。
还有,这样的问题,你可以画一下内存分析图你就明白了。
变量作用域, 你要先了解这个概念,才会明白这样赋值的意义
简单来讲吧。你在子窗体定义了一个临时父窗体的对象。get{} set{} 子窗体构造函数中设置传递参数与父窗体对象做绑定操作
并设置它的背景色。
static class Program { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Form1Instance = new Form1(); Application.Run(MainFormInstance); } public static Form1 Form1Instance; }
1先修改Program.cs文件中的代码。
2在Form1类中加入ChangeColor()函数能改颜色。
3然后Program.Form1Instance.ChangeColor();就能改颜色了。