首页 新闻 会员 周边 捐助

转换页面以后如何让按钮保持红色?

0
[已解决问题] 解决于 2018-01-23 15:49

哈喽,哈喽

    早上好啊

    现在遇到这么一个问题。

    1)我在form1中做了一个白色的按钮,点下去以后呢,这个按钮就变成红色了,这个是正常的。

   2)但是,我一旦转换页面进入了form2窗体后,再返回form1窗体,发现,这个按钮又变成白色了。我要再次点击它才能变为红色,但是我再转换页面回来,它又恢复白色了

  我的问题就是,不管我如何转换页面,我希望只点击一次按钮,她就一直保持红色。

绿绿山水的主页 绿绿山水 | 菜鸟二级 | 园豆:248
提问于:2018-01-23 09:03
< >
分享
最佳答案
1

楼主你好,早上在你的另一条博问(https://q.cnblogs.com/q/103198/)上我回答时,截图上传失败了,刚刚才发现。那个博问我刚刚把答案添上去了,我在这里再添一下,希望对你有所帮助!

===================================

你好,这就涉及到作用域的问题了,我猜测你是用以下方式操作的:

在form1中:

        private void button1_Click(object sender, EventArgs e)
        {
            this.button1.BackColor = Color.Red;
            Form2 f2 = new Form2();
            f2.Show();
            this.Hide();
        }

 

在form2中:

        private void button1_Click(object sender, EventArgs e)
        {
            Form1 f1 = new Form1();
            f1.Show();
            this.Hide();
        }

 

仔细看代码,会发现:在form2中,是再次实例了一个form1,这其实和之前不是同一个实例了(默认的实例在Program.cs中用Application.Run(new Form1())生成的),你想在form2中返回到默认的form1实例,你可以用如下代码:

form2中:

    public partial class Form2 : Form
    {
        Form _form1 = null;
        public Form2(Form from1)
        {
            _form1 = from1;

            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            _form1.Show();
            this.Hide();
        }
    }

 

form1中:

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
       
        private void button1_Click(object sender, EventArgs e)
        {
            this.button1.BackColor = Color.Red;

            Form2 f2 = new Form2(this);
            f2.Show();
            this.Hide();
        }
    }

奖励园豆:5
MrBug | 菜鸟二级 |园豆:273 | 2018-01-23 15:07

谢谢你哈,测试OK。

绿绿山水 | 园豆:248 (菜鸟二级) | 2018-01-23 15:48
其他回答(3)
0

form1别关了,隐藏显示代替关闭打开。

西漠以西 | 园豆:1675 (小虾三级) | 2018-01-23 09:11
1

这种界面用mvvm的思路来做,将页面状态放到一个对象里.

例子:public class viewmodel{button5color="Red"}

然后写一个bind方法.每次重新渲染界面的时候就调用这个bind方法.在bing方法中.

将viewmodel的状态绑定的界面上(将button5color的值付给button)

吴瑞祥 | 园豆:29449 (高人七级) | 2018-01-23 10:58

“转换页面进入了form2窗体后,再返回form1窗体”

他的意思恐怕是:关了form1打开form2再关了form2又打开form1。

所以,,,,,,

支持(0) 反对(0) 西漠以西 | 园豆:1675 (小虾三级) | 2018-01-23 11:40

可否把完整的代码写出来,我直接复制进去测试下。

支持(0) 反对(0) 绿绿山水 | 园豆:248 (菜鸟二级) | 2018-01-23 11:41

@西漠以西: 一样的.每次打开窗体的时候重新渲染下就行了.这样代码量就都在渲染方法上了.

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2018-01-23 11:49
0
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            button1.BackColor = Color.Red;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            using (var frm = new Form2())
            {
                frm.ShowDialog();
            }
        }
    }
}

数据酷软件 | 园豆:130 (初学一级) | 2018-01-23 13:50

没有遇到你说的情况啊

支持(0) 反对(0) 数据酷软件 | 园豆:130 (初学一级) | 2018-01-23 13:50

下次把teamviewer等远程截图贴上来。这么多码农哥哥,难道会没人手把手帮你

支持(1) 反对(0) 数据酷软件 | 园豆:130 (初学一级) | 2018-01-23 14:15

@数据酷软件: 谢谢你啊,你好久没来啦,想你了。

支持(0) 反对(0) 绿绿山水 | 园豆:248 (菜鸟二级) | 2018-01-23 15:30

@绿绿山水:楼下已经给你说明原因了。你不应该在Form2里再把Form1重新实例化一下,就是不用重新new一个Form1。变量和对象的作用域,生命周期这个知识点去加强一下,搞明白。

支持(0) 反对(0) 数据酷软件 | 园豆:130 (初学一级) | 2018-01-23 15:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册