C#.NET试题
题目内容:根据一个指定的值,如INT I=10,然后等分DataGrid为2行5列的10个单元格,然后在每个单元格中显示一张图片,而且每个单元格所显示的图片可以根据某一变量值进行替换(即不同变量值时,选定单元格所显示的图片不同)。如果删除中间的某个单元格后,其后的单元格能自动前移,补齐刚才删除留下的空白。
具体要求:在winform下实现我已经写了一部分代码了!如果删除中间的某个单元格后,其后的单元格能自动前移,补齐刚才删除留下的空白。  这段没有实现

解决方案 »

  1.   

    private void Form1_BindImage(int row,int col)
    {

    for( int i=0;i<row;i++)
    {
    for( int j=0;j<col;j++)
    {
    if(imageList1.Images.Count>i*5+j)
    {
    grid1.Images.Add(imageList1.Images[i*5+j],(i*5+j).ToString());
    grid1.Cell(i+1, j+1).SetImage((i*5+j).ToString());
    }
    else
    MessageBox.Show((i*5+j).ToString(),imageList1.Images.Count.ToString());
    }
    }
    // grid1.Refresh();

    } private void Form1_LoadImage()
    {
    Bitmap Img ; int row = grid1.Rows-1;
    int col = grid1.Cols-1; for( int i=0;i<row;i++)
    {
    for( int j=0;j<col;j++)
    {
    string path = @"F:\我的文档\Visual Studio Projects\CSharpTest\image\"+(i*5+j).ToString()+@".jpg";
    if(System.IO.File.Exists(path))
    {
    Img = new Bitmap(path);
    grid1.Images.Add(imageList1.Images[i*5+j],(i*5+j).ToString());
    Img.Dispose();
    Img = null;
    }
    }
    }
    } private void menuItemRef_Click(object sender, System.EventArgs e)
    {
    } private static int temp = 0;
    private static int num = 0;
    private static bool isfist = false; private void menuItemDel_Click(object sender, System.EventArgs e)
    {


    int row = grid1.Rows-1;
    int col = grid1.Cols-1; int DelRow = grid1.Selection.LastRow -1;
    int DelCol = grid1.Selection.LastCol -1; num ++; if(!isfist)
    {
    isfist = true;
    temp = DelRow*5+DelCol;
    num = 0;
    } int k = DelRow*5+DelCol;

    if(temp > k)
    {
    grid1.Images.Remove(DelRow*5+DelCol);
    imageList1.Images.RemoveAt(DelRow*5+DelCol) ;
    }
    else
    {
    imageList1.Images.RemoveAt(DelRow*5+DelCol + num) ;
    grid1.Images.Remove(DelRow*5+DelCol + num) ;
    }

    this.Form1_BindImage(row,col); grid1.Selection.ClearAll();

    // try
    // {
    // for( int i=0;i<row;i++)
    // {
    // for( int j=0;j<col;j++)
    // {
    // if(i == DelRow && j == DelCol) //要删除的单元格
    // {
    // if(DelRow!=grid1.Rows-1 && DelCol!=grid1.Cols-1) //不是最后一个单元格
    // {
    // if(IsDel)
    // {
    // imageList1.Images.RemoveAt(i*5+j+1);  //将图片从imageList1 中删除
    // this.Text += i*5+j+1 +"----";
    // }
    // else
    // {
    // imageList1.Images.RemoveAt(i*5+j);  //将图片从imageList1 中删除
    // this.Text += i*5+j+"----";
    // }
    // grid1.Cell(i+1, j+1).SetImage((i*5+j+1).ToString());
    // IsDel = true;
    // }
    // }
    // else
    // {
    // if(IsDel)
    // grid1.Cell(i+1, j+1).SetImage((i*5+j+1).ToString());
    // else
    // grid1.Cell(i+1, j+1).SetImage((i*5+j).ToString());
    // }
    //
    // }
    // }
    //
    // grid1.Refresh();
    // }
    // catch(Exception ee)
    // {
    // throw new Exception(ee.Message);
    // }
    } private void menuItemPast_Click(object sender, System.EventArgs e)
    {
    grid1.Selection.PasteData();
    } private void menuItemCopy_Click(object sender, System.EventArgs e)
    {
    grid1.Selection.CopyData();
    } private void Form1_Load(object sender, System.EventArgs e)
    {
    try
    {
    this.Form1_LoadImage();
    this.Form1_BindImage(grid1.Rows-1,grid1.Cols-1);

    }
    catch(Exception ee)
    {
    string err = "初始化DataGrid出错:" + ee.Message;
    throw new Exception(err);
    }
    finally
    { }
    }
      

  2.   

    先把所有的图片保存在arraylist里
    然后在onpaint中画arraylist中的图片
    删除的时候把arraylist里面的图片删除就可以了
    由于你是在onpaint中画的,所以不用担心补足空白的问题
      

  3.   

    比如
    ArrayList list = getimage();//得到图片
    protected override void OnPaint(PaintEventArgs e)
    {
    DrawImages(e.Graphics);
    base.OnPaint(e);
    }private void DrawImages(Graphics g);
    {
        //根据你的要求画图片
    }private void DeleteImage()
    {
        //删除图片,从list中删除,然后调用Invalidate
        this.Invalidate();
    }
      

  4.   

    winform的DataGrid里面有.Images.Add()这个方法吗?
      

  5.   

    DataGrid单元格里面显示图片怎么实现的?