首页 新闻 会员 周边

关于 .net c# winform 的问题,是之前我们做的一个小程序测试,很基础的问题,但我目前搞不清楚:

0
悬赏园豆:5 [已解决问题] 解决于 2013-02-20 06:47

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什么关系,怎么做到副窗口控制主窗口的颜色的,这里面的逻辑关系式什么?讲解越详细越好,谢谢各位先,这个问题困扰我好久了

v03051435的主页 v03051435 | 初学一级 | 园豆:194
提问于:2013-02-14 16:35
< >
分享
最佳答案
0

建议楼主随便买本程序语言入门书籍慢慢认真阅读。

  1.  为什么可以通过这个程序控制主窗口的背景颜色

        因为fenetre1.BackColor = Color.Red;这个代码。

  2. 那个this是什么作用

        this是个变量。

  3. fenetre1和 fenetre什么关系

        fenetre1是全局变量,fenetre是局部变量。

  4. 怎么做到副窗口控制主窗口的颜色的,这里面的逻辑关系式什么

        因为已经将主窗口传给了副窗口,并保存为fenetre1。

    所以fenetre1就是主窗口,只要操作fenetre1就是操作主窗口。

收获园豆:3
snet | 初学一级 |园豆:157 | 2013-02-14 16:57

帅哥,你回答的就没在点子上啊,回答1,我也能看懂是改变背景颜色,回答2,this不但是变量,而且还是代表当前创建的对象的一个变量。回答3,不明白想说什么。回答4,理论我也懂,怎么对应到代码。。。

v03051435 | 园豆:194 (初学一级) | 2013-02-14 21:09

@v03051435: 上面的解释是对的。稍微做一下补充:

2 this的位置是主窗体内,写在一个类内的this代表这个类本身的引用,因此这个this是主窗体的引用。

fenetre是参数名,在实际创建对象时赋值为this,即主窗体的引用

fenetre1=fenetre,实际上fenetre1也就是主窗体的引用

碧落星痕 | 园豆:708 (小虾三级) | 2013-02-14 21:19

@碧落星痕: 

谢谢你的回答,不过我不明白副窗口中

 

public Bouton_radio(Form1 fenetre)

{

InitializeComponent();

fenetre1 = fenetre;

}

public Bouton_radio(Form1 fenetre) 这行构造函数的代码,其中的fenetre在生成实例的时候就自动赋值为主窗口的引用吧?fenetre既然已经是主窗口了,那么直接fenetre.BackColor = Color.Red;不就行了嘛?为什么还要先赋值给fenetre1,然后再改变fenetre1的背景呢?

v03051435 | 园豆:194 (初学一级) | 2013-02-15 05:28

@v03051435: 因为你在单击事件的时候,才传过去的主窗体的引用。也就是在单击这个事件的参数里,才有主窗体,需要在这个事件里,把主窗体的引用赋给副窗体,不然这个方法结束后,你副窗体就丢失了主窗的引用,你也就无法操纵父窗体的颜色了。

你的代码我只是大概看了一下,如果哪不对,你再回复。

还有,这样的问题,你可以画一下内存分析图你就明白了。

北国苍狼 | 园豆:200 (初学一级) | 2013-02-15 09:29
其他回答(3)
0

变量作用域, 你要先了解这个概念,才会明白这样赋值的意义

收获园豆:2
Yu | 园豆:12980 (专家六级) | 2013-02-15 15:43
0

简单来讲吧。你在子窗体定义了一个临时父窗体的对象。get{} set{} 子窗体构造函数中设置传递参数与父窗体对象做绑定操作

并设置它的背景色。

辛巴 | 园豆:622 (小虾三级) | 2013-02-16 15:54
0
static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Form1Instance = new Form1();
            Application.Run(MainFormInstance);
        }

        public static Form1 Form1Instance;
    }


 

Firen | 园豆:5385 (大侠五级) | 2013-02-16 16:20

1先修改Program.cs文件中的代码。

2在Form1类中加入ChangeColor()函数能改颜色。

3然后Program.Form1Instance.ChangeColor();就能改颜色了。

支持(0) 反对(0) Firen | 园豆:5385 (大侠五级) | 2013-02-16 16:22
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册