一个窗体如何控制另一个窗体的开关

上帝有好生之德 2009-07-15 05:47:53
我才chatform窗体中设置了个全局变量
bool chOpen = false;

然后在按钮事件里,想通过改变chOpen值来控制chatHistory窗体的开关,结果是不停的按不停的打开chatHistory窗体
ChatHistory chatHistory = new ChatHistory();

//判断聊天记录是否已经打开
if (chOpen == false)
{
chOpen = true;

//显示聊天窗口
chatHistory.Show();
}
else
{
chOpen = false;
//关闭
chatHistory.Close();
}
...全文
122 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 lsj_zrp 的回复:]
private static ChatHistory _instance;
        public static ChatHistory Instance()
        {
            if (_instance == null)
                _instance = new ChatHistory ();
            else
                _instance.Activate();
            return _instance;
        }


        protected override void OnClosing(CancelEventArgs e)
        {
            _instance = null;
            base.OnClosing(e);
        }
这个要拷到你的ChatHistory里面
[/Quote]
谢谢,搞定,没学过这个窗体单态,回头好好研究下
lsj_zrp 2009-07-15
  • 打赏
  • 举报
回复
private static ChatHistory _instance;
public static ChatHistory Instance()
{
if (_instance == null)
_instance = new ChatHistory ();
else
_instance.Activate();
return _instance;
}


protected override void OnClosing(CancelEventArgs e)
{
_instance = null;
base.OnClosing(e);
}
这个要拷到你的ChatHistory里面
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 lsj_zrp 的回复:]
用单件模式可以解决你的问题啊,点击都创建了一个新的chatHistory,所以chatHistory.Close();关闭的是最新打开的窗口,之前打开的那个并没有关闭。
private static ChatHistory _instance;
        public static ChatHistory Instance()
        {
            if (_instance == null)
                _instance = new ChatHistory ();
            else
                _instance.Activate();
            return _instance;
        }


        protected override void OnClosing(CancelEventArgs e)
        {
            _instance = null;
            base.OnClosing(e);
        }

然后
  ChatHistory chatHistory =ChatHistory.Instance();

            //判断聊天记录是否已经打开
            if (chOpen == false)
            {
                chOpen = true;

                //显示聊天窗口
                chatHistory.Show();
            }
            else
            {
                chOpen = false;
                //关闭
                chatHistory.Close();
            }
[/Quote]
前面代码拷过来 为啥我的ChatHistory .不出Instance()
cumtnuist 2009-07-15
  • 打赏
  • 举报
回复
study
lsj_zrp 2009-07-15
  • 打赏
  • 举报
回复
用单件模式可以解决你的问题啊,点击都创建了一个新的chatHistory,所以chatHistory.Close();关闭的是最新打开的窗口,之前打开的那个并没有关闭。
private static ChatHistory _instance;
public static ChatHistory Instance()
{
if (_instance == null)
_instance = new ChatHistory ();
else
_instance.Activate();
return _instance;
}


protected override void OnClosing(CancelEventArgs e)
{
_instance = null;
base.OnClosing(e);
}

然后
ChatHistory chatHistory =ChatHistory.Instance();

//判断聊天记录是否已经打开
if (chOpen == false)
{
chOpen = true;

//显示聊天窗口
chatHistory.Show();
}
else
{
chOpen = false;
//关闭
chatHistory.Close();
}
aotian798 2009-07-15
  • 打赏
  • 举报
回复
楼上 NIU....
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ginni215 的回复:]
你每次点击都创建了一个新的chatHistory,所以相当于每点两次,出现一个窗体,
考虑下用单例模式~~
[/Quote]
只有click 没有double和single之分吧
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ljhcy99 的回复:]
chatform里面定义
ChatHistory  类型变量 fr

按钮事件 :
if (fr == null)
          {
              fr = new Form2();
              fr.Show();
          }
          else
          {
              fr.Close();
              fr.Dispose();
       
              fr = null;
              }
[/Quote]
窗口打不开了,fr.Close()未将对象引用设置到对象的实例。
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 cc_net 的回复:]
A控制B
最简单方法,B传递给A
最好的方法,委托,A要关闭B时,通知B,B自己关闭自己
[/Quote]
具体解释下呗
shadow_2006 2009-07-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 cc_net 的回复:]
A控制B
最简单方法,B传递给A
最好的方法,委托,A要关闭B时,通知B,B自己关闭自己
[/Quote]
楼上有理!
ginni215 2009-07-15
  • 打赏
  • 举报
回复
你每次点击都创建了一个新的chatHistory,所以相当于每点两次,出现一个窗体,
考虑下用单例模式~~
ljhcy99 2009-07-15
  • 打赏
  • 举报
回复
chatform里面定义
ChatHistory 类型变量 fr

按钮事件 :
if (fr == null)
{
fr = new Form2();
fr.Show();
}
else
{
fr.Close();
fr.Dispose();

fr = null;
}
cc_net 2009-07-15
  • 打赏
  • 举报
回复
A控制B
最简单方法,B传递给A
最好的方法,委托,A要关闭B时,通知B,B自己关闭自己
mengfeihui 2009-07-15
  • 打赏
  • 举报
回复
From chatHistory= new chatHistory();
chatHistory.Show();
From chatHistory= new chatHistory();
chatHistory.Close();

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧