当前位置:编程学习 > C#/ASP.NET >>

关于C#里面的两个以上的panel切换

--------------------编程问答-------------------- pnlSingerAdress是不是在歌星点歌的容器里面,其它panel是不是全部隐藏了? --------------------编程问答--------------------
引用 1 楼 devmiao 的回复:
pnlSingerAdress是不是在歌星点歌的容器里面,其它panel是不是全部隐藏了?
是的!其他panel的Visible属性都是false 
待我点击第一个panel的listview后 触发事件 然后就有了上面的关键代码 但就是没有显示第二个panel 为什么? --------------------编程问答-------------------- 你能标注那个对应的是那个panel么? --------------------编程问答--------------------               
  pnlCenter.Visible = false;
                pnlSingerAdress.Location = pnlCenter.Location; //1
                pnlSingerAdress.Dock = DockStyle.Fill           //2
                pnlSingerAdress.Visible = true;

终觉得1,2  两句代码哪里有问题
--------------------编程问答-------------------- 要写一个类,并且把Panle名和动作写成变量
用动作名去触发类切换显示Panle,并且初始化他的位置
设计的时候Panl画好可以拖到一边,缩下不影响下一个设计,程序运行的时候初始化 他的长宽左边距,上边距就可以了,不要想得太复杂 --------------------编程问答-------------------- 来回切换两个面板的Visible属性来实现切换 --------------------编程问答--------------------
引用 4 楼 happy09li 的回复:
              
  pnlCenter.Visible = false;
                pnlSingerAdress.Location = pnlCenter.Location; //1
                pnlSingerAdress.Dock = DockStyle.Fill           //2
                pnlSingerAdress.Visible = true;

终觉得1,2  两句代码哪里有问题

pnlCenter  是第一个Panel  就是男,女,组合 那个面板
然后第二个Panel是pnlSingerAdress 就是大陆,台湾,香港。。那个面板 
我的目的是隐藏第一个Panel  显示第二个面板 --------------------编程问答--------------------
引用 7 楼 u011319254 的回复:
Quote: 引用 4 楼 happy09li 的回复:

              
  pnlCenter.Visible = false;
                pnlSingerAdress.Location = pnlCenter.Location; //1
                pnlSingerAdress.Dock = DockStyle.Fill           //2
                pnlSingerAdress.Visible = true;

终觉得1,2  两句代码哪里有问题

pnlCenter  是第一个Panel  就是男,女,组合 那个面板
然后第二个Panel是pnlSingerAdress 就是大陆,台湾,香港。。那个面板 
我的目的是隐藏第一个Panel  显示第二个面板

我是根据课件里说的照做的! --------------------编程问答-------------------- panel太多,看看是不是有嵌套的? --------------------编程问答--------------------
引用 9 楼 u011130289 的回复:
panel太多,看看是不是有嵌套的?

没嵌套  直接就在事件里写的  直接就用Visible属性切换而已! --------------------编程问答--------------------
引用 8 楼 u011319254 的回复:
Quote: 引用 7 楼 u011319254 的回复:

Quote: 引用 4 楼 happy09li 的回复:

              
  pnlCenter.Visible = false;
                pnlSingerAdress.Location = pnlCenter.Location; //1
                pnlSingerAdress.Dock = DockStyle.Fill           //2
                pnlSingerAdress.Visible = true;

终觉得1,2  两句代码哪里有问题

pnlCenter  是第一个Panel  就是男,女,组合 那个面板
然后第二个Panel是pnlSingerAdress 就是大陆,台湾,香港。。那个面板 
我的目的是隐藏第一个Panel  显示第二个面板

我是根据课件里说的照做的!


pnlSingerAdress.BringToFront();
pnlSingerAdress.Dock = DockStyle.Fill

换成这样试试
--------------------编程问答-------------------- 你这个问题不是因为“复杂”,而是因为“低级”,所以有的人懒得回,有的人又看不懂。

如果只是简单地UI设计,那么你应该单独设计不同的用户控件,单独去开发和测试(放在测试窗体里测试)。然后,你的主窗体使用一个一致的接口去管理它,例如(假设是)
public interface IMainWindow
{
    Add(string name, UserControl panel);
    SetVisible(string name);
}

你的程序把n多个组件插入主窗体,它内部把内容控件保存在集合中。然后一个统一的SetVisible方法自动、统一地处理这个逻辑。

程序设计者喜欢讨论接口、内数据结构,然后针对通用的内部结构才来讨论通用的逻辑。懒得谈论你这种“四条语句”。 --------------------编程问答--------------------
引用 11 楼 happy09li 的回复:
Quote: 引用 8 楼 u011319254 的回复:

Quote: 引用 7 楼 u011319254 的回复:

Quote: 引用 4 楼 happy09li 的回复:

              
  pnlCenter.Visible = false;
                pnlSingerAdress.Location = pnlCenter.Location; //1
                pnlSingerAdress.Dock = DockStyle.Fill           //2
                pnlSingerAdress.Visible = true;

终觉得1,2  两句代码哪里有问题

pnlCenter  是第一个Panel  就是男,女,组合 那个面板
然后第二个Panel是pnlSingerAdress 就是大陆,台湾,香港。。那个面板 
我的目的是隐藏第一个Panel  显示第二个面板

我是根据课件里说的照做的!


pnlSingerAdress.BringToFront();
pnlSingerAdress.Dock = DockStyle.Fill

换成这样试试

我去~~成功了= =为什么我之前的方法就不行? --------------------编程问答-------------------- 在合理的工程方法中,各个独立的子应用程序UI都已经测试好了,不会再在SetVisible方法的代码中去出现什么 Location、Dock这类代码。

而你能在切换子应用程序界面这个逻辑时,出现这类代码,就足以证明你的代码可能出现各种各样意外问题。而你采取在所有地方乱copy代码的习惯,有懒得贴所有代码,很难找到问题。 --------------------编程问答--------------------
引用 12 楼 sp1234 的回复:
你这个问题不是因为“复杂”,而是因为“低级”,所以有的人懒得回,有的人又看不懂。

如果只是简单地UI设计,那么你应该单独设计不同的用户控件,单独去开发和测试(放在测试窗体里测试)。然后,你的主窗体使用一个一致的接口去管理它,例如(假设是)
public interface IMainWindow
{
    Add(string name, UserControl panel);
    SetVisible(string name);
}

你的程序把n多个组件插入主窗体,它内部把内容控件保存在集合中。然后一个统一的SetVisible方法自动、统一地处理这个逻辑。

程序设计者喜欢讨论接口、内数据结构,然后针对通用的内部结构才来讨论通用的逻辑。懒得谈论你这种“四条语句”。

是的!因为懂的人觉得“低级”  不懂的人也看不懂。   但是万丈高楼平地起,必须要把面对自己学习的任何难题都一一解决,才能成长!  不过多谢你的教训! --------------------编程问答--------------------
引用 14 楼 sp1234 的回复:
在合理的工程方法中,各个独立的子应用程序UI都已经测试好了,不会再在SetVisible方法的代码中去出现什么 Location、Dock这类代码。

而你能在切换子应用程序界面这个逻辑时,出现这类代码,就足以证明你的代码可能出现各种各样意外问题。而你采取在所有地方乱copy代码的习惯,有懒得贴所有代码,很难找到问题。

那么  前辈 是要把所有的功能单独写一个 测试成功后再写进去项目里面吗? 多谢赐教! --------------------编程问答-------------------- 楼主可能把两个 panel 设计成嵌套关系了,应该是并列关系才对,
在 C# 里拖动控件的时候很容易就造成这样的结果。 --------------------编程问答--------------------
引用 11 楼 happy09li 的回复:
Quote: 引用 8 楼 u011319254 的回复:

Quote: 引用 7 楼 u011319254 的回复:

Quote: 引用 4 楼 happy09li 的回复:

              
  pnlCenter.Visible = false;
                pnlSingerAdress.Location = pnlCenter.Location; //1
                pnlSingerAdress.Dock = DockStyle.Fill           //2
                pnlSingerAdress.Visible = true;

终觉得1,2  两句代码哪里有问题

pnlCenter  是第一个Panel  就是男,女,组合 那个面板
然后第二个Panel是pnlSingerAdress 就是大陆,台湾,香港。。那个面板 
我的目的是隐藏第一个Panel  显示第二个面板

我是根据课件里说的照做的!


pnlSingerAdress.BringToFront();
pnlSingerAdress.Dock = DockStyle.Fill

换成这样试试

哦~不!  我这里还是出错了!  之前改写的代码把第一个panel的Visible属性设为true了 改回false依然是不显示第二个panel --------------------编程问答-------------------- 来看看,学习一下。 --------------------编程问答-------------------- 应该是其中一个panel被放在另一个panel里了
所以外层的那个被隐藏的时候 里层的那个也跟着被隐藏了
设计的时候两个分开放 不要嵌套在一起了
执行的时候再改变panel的大小位置 应该就可以了 --------------------编程问答--------------------
引用 14 楼 sp1234 的回复:
在合理的工程方法中,各个独立的子应用程序UI都已经测试好了,不会再在SetVisible方法的代码中去出现什么 Location、Dock这类代码。

而你能在切换子应用程序界面这个逻辑时,出现这类代码,就足以证明你的代码可能出现各种各样意外问题。而你采取在所有地方乱copy代码的习惯,有懒得贴所有代码,很难找到问题。

你的方法很好,但是对于楼主这种对着课件抄代码的初学者,我肯定他完全不知道你在说什么。 --------------------编程问答--------------------
引用 18 楼 u011319254 的回复:
Quote: 引用 11 楼 happy09li 的回复:

Quote: 引用 8 楼 u011319254 的回复:

Quote: 引用 7 楼 u011319254 的回复:

Quote: 引用 4 楼 happy09li 的回复:

              
  pnlCenter.Visible = false;
                pnlSingerAdress.Location = pnlCenter.Location; //1
                pnlSingerAdress.Dock = DockStyle.Fill           //2
                pnlSingerAdress.Visible = true;

终觉得1,2  两句代码哪里有问题

pnlCenter  是第一个Panel  就是男,女,组合 那个面板
然后第二个Panel是pnlSingerAdress 就是大陆,台湾,香港。。那个面板 
我的目的是隐藏第一个Panel  显示第二个面板

我是根据课件里说的照做的!


pnlSingerAdress.BringToFront();
pnlSingerAdress.Dock = DockStyle.Fill

换成这样试试

哦~不!  我这里还是出错了!  之前改写的代码把第一个panel的Visible属性设为true了 改回false依然是不显示第二个panel

直接把项目上传上来吧,或者把form的design.cs文件贴出来。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,