首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

关于容器中的控件遍历有关问题

2011-12-28 
关于容器中的控件遍历问题代码如下//添加一个RadioButton控件.然后计算新控件显示位置publicvoidaddNpc(Im

关于容器中的控件遍历问题
代码如下
//添加一个RadioButton   控件   .然后计算新控件显示位置
public   void   addNpc(Image   img,   int   atype,   int   asubtype)
                {
                        RadioButton   rb   =   new   RadioButton();

                        rb.Appearance   =   Appearance.Button;
                        rb.AutoSize   =   true;
                        rb.Location   =   new   System.Drawing.Point(0,   0);
                        rb.Size   =   new   System.Drawing.Size(32,   32);
                        rb.AutoSize   =   false;

                        rb.BackgroundImage   =   img;

                        rb.BackgroundImageLayout   =   ImageLayout.Zoom;

                        rb.TabStop   =   true;
                        rb.UseVisualStyleBackColor   =   true;

                        rb.Tag   =   new   Point(atype,   asubtype);

                        this.panel1.Controls.Add(rb);
                        calculateSize();

                }
               
                  private   int   rbNumInCol;
                private   int   rbNumInRow;

                public   void   calculateSize()
                {
                        panel1.Width   =   this.Width;
                        rbNumInCol   =   panel1.Width   /   50;
                        rbNumInRow   =   rbsCnt   /   rbNumInCol;
                        if   (rbsCnt   %   rbNumInCol   !=   0)   rbNumInRow++;
                        panel1.Height   =   rbNumInRow   *   40;

                        int   tx   =   0;
                        int   ty   =   0;

                        foreach   (Control   tCorl   in   this.panel1.Controls)      


                          {
//问题出现在这里.
/*
我需要判断panel1上面的所有RadioButton控件.然后做位置调整.
但是tCorl.GetType()   is   RadioButton得到的结果永远是false.
请教.这里应该如何写(我试过   tCorl.GetType()   ==   typeof(RadioButton)   也不对.)
在watch里面出现的问题如下:
This   expression   causes   side   effects   and   will   not   be   evaluated;
我应该如何处理这种情况
*/
                                  if   (tCorl.GetType()   is   RadioButton)
                                  {
                                          RadioButton   trb   =   (RadioButton)tCorl;
                                          trb.Left   =   tx;
                                          trb.Top   =   ty;
                                          tx   +=   50;
                                          if   (tx   +   50   >   panel1.Width)
                                          {
                                                  ty   +=   40;
                                                  tx   =   0;
                                          }
                                  }
                          }      

                }

[解决办法]
你可以用tableLayoutPanel代替panel,自己计算layout好麻烦。
foreach (Control con in this.Controls)
{
if (con.GetType() == typeof(SagaViewerPanel.ClassContainer))
if (classID == ((SagaViewerPanel.ClassContainer)con).ClassID)
return true;
}
这是我做的一个project里的代码,if (con.GetType() == typeof(SagaViewerPanel.ClassContainer)) 这么写应该没有问题。

[解决办法]
直接tCorl is RadioButton呢?
或者
foreach (Control tCorl in this.panel1.Controls)
{
RadioButton trb = tCorl as RadioButton;
if( trb != null )
{
...
}
}
代码我没试过,随便说说:)
------解决方案--------------------


用 Control.GetType().Name 去判断

热点排行