C#中关于TabPage隐藏与显示的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中关于TabPage隐藏与显示的问题相关的知识,希望对你有一定的参考价值。

据我已经知道的两个解决题目问题的方法:
1、使用Remove和Add方法可以较好地实现;
2、设置TabPage的parent属性也能够实现。
但是这两种方法不能解决我的问题,所以如果你的答案是这样的,请跳过,不要浪费自己的时间。
我的目标如下:
只知道TabPage的Name(从XML文件中读取),然后需要根据一个多选框或单选框(也从XML文件中读取,已实现)的选定情况来隐藏或显示那个Name对应的TabPage。主要目标是通过调用另一个类(不是form中)中的方法来实现(即需要传递参数)。
遇到的问题是:通过遍历控件的方式,可以通过Name属性得到控件的对象的引用。但是,当TabPage从TabControl中被Remove后,就无法通过遍历控件得到它了(我也统计过被remove后的form中的控件总数),所以也就无法引用那个TabPage,然后就无法使用Add方法和设置Parent属性了。
问题可以归结为:如何通过Name获得该对象的引用(该方法在不同的类中)?
你也可以提供我所要达到的目的的解决方案。
=======================================================
致1楼:拜托!虽然我分多,但也不至于。。。还是看看msdn吧!

我刚刚试了一下,发现TabPage的Hide()方法要放在TabControl.Add(TabPage)之前,但是效果不好,因为实验的结果是TabPage里面原来添加的控件没有了,但TabPage仍然显示

    
 this.tabPage2.Hide();
this.tabControl1.TabPages.Add(this.tabPage2);


参考技术A 可是设置TabPage的Visible属性不就可以隐藏与显示TabPage 参考技术B this.tabPage1.Parent = null; 参考技术C 哇!!分好多啊!!学习学习 也不懂 看看多久有人来解答

C#中关于try-catch的异常捕获问题

        在平日工作里,我们的有时候需要对代码进行异常捕获,那么我们就需要了解到try-catch语句。

        首先,我们通过如下面代码可以知道throw是将该异常抛出,即Test()中存在异常,由Test()捕获并抛出,并在Main中接收并处理。在Test()中的throw下方的Console.WriteLine并未执行。那么我们可以得出如下结论:

结论1:throw中的异常被抛出后,该异常被外层调用处接收。且throw下方代码不被执行。

示例一

        其次,我们将示例一中的第31行进行修改,那么得出如下结果,Main的catch没有执行,原因是异常被Test中的catch捕获,并处理了,由于自行处理了,且并未将该异常往外抛,则出现Main中无任何异常捕获。

结论2:catch捕获后,若自行处理,则不会对外有任何影响;若通过throw往外抛,则会由外层再次捕获到。

示例二

C#中关于try-catch的异常捕获问题

        

        接着,我们在示例二再做修改,如下图所示,Test()捕获异常后,先自行处理,再通过throw直接抛出,我们会发现真正错误的第26行的堆栈信息被丢失了。而外层Main中只报了第32行处有错,并未直接指出错误的本身是第26行导致的。

结论3:当一个异常由throw直接被抛出,那么再次接收到的异常会存在堆栈信息的缺失。

示例三:

        最后,我们将示例三中的代码进行修改,如下图所示,我们在Test()中的catch中捕获到异常后,在throw抛出时,我们创建了新的自定义异常new Exception("错误的堆栈信息:",e),并将原始的异常作为innerException,所以异常信息中包含了多个层次的异常信息。

结论:当异常信息通过throw抛出后,我们应该采用 new Exception(string message, Exception innerException)方式抛出,这样保证堆栈信息的完整,能快速定位出异常的具体位置。

using System;namespace ExceptionDemo{ class Program { static void Main(string[] args) { try { Test(); } catch (Exception e) { Console.WriteLine("1====================="); Console.WriteLine(e); Console.WriteLine("1====================="); } Console.ReadKey(); } public static void Test() { try { int i = 0; i = 10 / i; } catch (Exception e) { Console.WriteLine("2====================="); Console.WriteLine(e); throw new Exception("错误的堆栈信息:",e); Console.WriteLine("2====================="); } } }}


以上是关于C#中关于TabPage隐藏与显示的问题的主要内容,如果未能解决你的问题,请参考以下文章

c# listbox 显示大量数据速度很慢,如何解决?

c#中关于UCCAPI的说明

Winform中选项卡问题 me是初学者,想问一下如何点击按钮,实现Tabpage A和Tabpage B之间的转换?

c#中关于repeater控件的说法

如何从 TabControl 隐藏 TabPage [重复]

C# 中关于重载与重写的区别及用法