首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 高分求助,一小段代码问题,关于Hashtable ,急 [已结贴,结贴人:net0003]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • net0003
    • 等级:
    发表于:2008-05-09 10:26:22 楼主

    Hashtable Loc=new Hashtable ;
    int i=0;
    //假设panel中有4个PictureBox
    foreach (Control c in pl.Controls)
    {
    if (c is PictureBox && c.Name !="pBx_bjl")
    {
    Loc[c]=c.Location.X;
    foreach (object key in Loc.Keys )
    {
    PictureBox pic = key as PictureBox;
    i = (int)Loc[key];
    //i就是存儲進去的Location.X
    }
    switch(MaxNum)
    {
    case 1:
    case 2:
    case 3:
    case 4:
    this.pBx_bjl .Location =new Point (point.X -280,this.pBx_bjl .Location .Y ) ;
    this.pBx_bjl .Width=560;
    if(???????location.x最小的)
    {
    c.Location =new Point (point.X -240,c.Location .Y );
    }
    else if(????location.x其次的)
    {
    c.Location =new Point (point .X +180,c.Location .Y );
    }
    else if(???location.x在其次的)
    {
    c.Location =new Point (point.X -100,c.Location .Y );
    }
    //location.x最大的
    else
    {
    c.Location =new Point (point.X +40,c.Location .Y );
    }
    break;
    case 5:
    this.pBx_bjl .Width=620;
    break;
    }


    帮我把if中红色的写上
    50  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • net0003
    • 等级:
    发表于:2008-05-09 10:27:261楼 得分:0
    if()
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-09 10:36:152楼 得分:0
    已经给你写好了,NET0003,去看看吧...


    SortedList sl = new SortedList();
               
                foreach (Control c in this.Controls)
                {
                    if (c is Button)
                    {
                        sl[c.Location.X] = c;
                    }
                }


                bool min=true;
                Button minB=null, maxB=null;

                foreach (DictionaryEntry de in sl)
                {
                    if (min)
                    {
                        minB = (de.Value as Button);
                        min = false;
                    }

                    maxB = (de.Value as Button);
                    //MessageBox.Show(de.Value.ToString(), "Button Caption");               
                }

                //MessageBox.Show(maxB.Location.X.ToString(), "Button Caption");

                foreach (Control c in this.Controls)
                {
                    if (c ==minB)
                    {
                        MessageBox.Show(minB.Location.X.ToString(), "Button Caption");
                    }
                    else if (c == maxB)
                    {
                        MessageBox.Show(maxB.Location.X.ToString(), "Button Caption");
                    }
                    else
                    {
                    }
                }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-09 10:36:563楼 得分:0
    你怎么开两个呀,真有'分'.呵呵
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • net0003
    • 等级:
    发表于:2008-05-09 10:44:384楼 得分:0
    我这么写不对么,就告诉我if怎么写就OK,就一句的Code
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-09 10:55:055楼 得分:0
    因为Hashtable 是根据Key(键)值来的.你的key又是Control类型,而且你又不知道control的name(除非你自己已经知道确切的名称,既然你要用这个判断最大,最小值,所以你这个应该是动态变化的),因此你不知道ht[]的方括号具体要填什么....
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • net0003
    • 等级:
    发表于:2008-05-09 10:59:276楼 得分:0
    引用 5 楼 ziseliuxingzh 的回复:
    因为Hashtable 是根据Key(键)值来的.你的key又是Control类型,而且你又不知道control的name(除非你自己已经知道确切的名称,既然你要用这个判断最大,最小值,所以你这个应该是动态变化的),因此你不知道ht[]的方括号具体要填什么....

    严重同意楼上的,我就想这个语句都想的脑袋都大了,我试试你的啊,
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • net0003
    • 等级:
    发表于:2008-05-09 11:00:457楼 得分:0
    但是我想按照我的思路去写,难道没有解决的方法么
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-09 12:08:448楼 得分:0
    你的这个思路实现起来有点麻烦,定义的变量会多,何不就用上面的呢,你的目标是解决问题,知道这个方法能解决就行了,呵呵
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • boblaw
    • 等级:
    发表于:2008-05-09 12:58:039楼 得分:0
    你的值放進去還要排序?
    不好意思,之前你那個帖子中,以為不需要排序,所以建議你使用HashTable。
    要排序的話,使用SortedList代替HashTable即可
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-09 13:08:1810楼 得分:0
    hashtable不能排序啊
    排序需要实现IComparable接口
    你换成list,arraylist等集合
    推荐使用泛型接口
    C# code
    List<int> Loc=new List<int>(); //假设panel中有4个PictureBox foreach (Control c in pl.Controls) { if (c is PictureBox && c.Name !="pBx_bjl") { Loc.Add(c.Location.X); }} Loc.Sort();// // Loc[0]就是最小的,Loc已经排序了,你就知道怎么处理了吧
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • net0003
    • 等级:
    发表于:2008-05-09 13:31:2311楼 得分:0
    引用 10 楼 virusplayer 的回复:
    hashtable不能排序啊
    排序需要实现IComparable接口
    你换成list,arraylist等集合
    推荐使用泛型接口

    C# codeList <int> Loc=new List <int>();

    //假设panel中有4个PictureBox
    foreach (Control c in pl.Controls)
    {
    if (c is PictureBox && c.Name !="pBx_bjl")
    {
        Loc.Add(c.Location.X);
    }}
                Loc.Sort();//
              // Loc[0]就是最小的,Loc已经排序了,你就知道怎么处理了吧


    OK
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • boblaw
    • 等级:
    发表于:2008-05-09 13:31:4112楼 得分:0
    下面的代碼是使用List進行排序。
    C# code
    //首先要創建一個實現ICompare的類,用來排序 public class PictureBoxComparer : IComparer<PictureBox> { #region IComparer<PictureBox> 成员 public int Compare(PictureBox x, PictureBox y) { if (x.Location.X > y.Location.X) return 1; else if (x.Location.X < y.Location.X) return -1; else { return 0; } } #endregion } //下面是使用list存儲並排序及取值的代碼 List<PictureBox> list=new List<PictureBox>(); foreach (Control c in panel1.Controls) { if (c is PictureBox) { list.Add((PictureBox) c); } } //下面代碼是對list進行排序,會以升序來排列。 list.Sort((IComparer<PictureBox>)new PictureBoxComparer()); //下面的代碼可以枚舉所有的pictureBox foreach (PictureBox pic in list) { MessageBox.Show(pic.Location.X.ToString()); } //獲取最大的X值的 PictureBox MaxXPicBox = list[list.Count - 1]; //獲取最小的X值的 PictureBox MinXPicBox = list[0];

    ps:10樓的代碼排序之後,對應的PictureBox無法找出。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • boblaw
    • 等级:
    发表于:2008-05-09 13:36:1413楼 得分:0
    上述代碼,在list排序之後,list中的項目是已經按X值從小到大排好序的,而list保存的是PictureBox類型,你可以很方便的操作。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • boblaw
    • 等级:
    发表于:2008-05-09 13:37:4814楼 得分:0
    之所以要實現一個IComparer <PictureBox>接口的類,是由於List不支持PictureBox的排序,需要自己來定義排序規則
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • net0003
    • 等级:
    发表于:2008-05-09 14:00:3115楼 得分:0
    我要死了,日,我的是NET03,没有System.Collections.Generic 命名空间啊,接口实现不了,难道必须要2.0以上的么
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • boblaw
    • 等级:
    发表于:2008-05-09 14:02:3416楼 得分:0
    那你直接用List,不要用泛型即可。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • boblaw
    • 等级:
    发表于:2008-05-09 14:18:5917楼 得分:50
    下面的代碼使用ArrayList
    C# code
    public class PictureBoxComparer : IComparer { #region IComparer 成员 public int Compare(object x, object y) { PictureBox picX = (PictureBox)x; PictureBox picY = (PictureBox) y; if (picX.Location.X > picY.Location.X) return 1; else if (picX.Location.X < picY.Location.X) return -1; else { return 0; } } #endregion } ArrayList list = new ArrayList(); foreach (Control c in panel1.Controls) { if (c is PictureBox) { list.Add(c); } } //下面代碼是對list進行排序,會以升序來排列。 list.Sort((IComparer)new PictureBoxComparer()); //下面的代碼可以枚舉所有的pictureBox for (int i = 0; i < list.Count;i++ ) { PictureBox pic = (PictureBox)list[i]; MessageBox.Show(pic.Location.X.ToString()); } //獲取最大的X值的 PictureBox MaxXPicBox = (PictureBox) list[list.Count - 1]; //獲取最小的X值的 PictureBox MinXPicBox = (PictureBox)list[0];
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    世纪乐知(北京)网络技术有限公司 版权所有 京 ICP 证 020026 号
    Copyright © 2000-2007, CSDN.NET, All Rights Reserved