1

誰かが助けてくれることを願っています。私のソフトウェアには dynamicData Grid Viewsがあり、作成時にすべて共通の grd 名を共有しています。それぞれが動的タブに配置されます。すべて正常に動作しますが、に画像を追加したかったのGrid Row Headerです。ここには非動的グリッド ビューの例がありますが、動的ではありません。そのため、次のコードを適応させて使用しました。

private void grd_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
    if (e.InheritedRowStyle.BackColor == Color.Gold)
    {
        Bitmap myBitmap = new Bitmap(imageList1.Images[0]);
        Icon myIcon = Icon.FromHandle(myBitmap.GetHicon());

        Graphics graphics = e.Graphics;

        //Set Image dimension - Users choice
        int iconHeight = 16;
        int iconWidth = 32;

        //Set x/y position - As the center of the RowHeaderCell
        int xPosition = ((e.RowBounds.Height * 2) - iconWidth) / 2;
        int yPosition = ((e.RowBounds.Y + (e.RowIndex * e.RowBounds.Height) - iconHeight) / 2)+ e.RowBounds.Height + 1;

        Rectangle rectangle = new Rectangle(xPosition, yPosition, iconWidth, iconHeight);
        graphics.DrawIcon(myIcon, rectangle);

    }
    else if (e.InheritedRowStyle.BackColor == Color.PowderBlue)
    {
        Bitmap myBitmap = new Bitmap(imageList1.Images[1]);
        Icon myIcon = Icon.FromHandle(myBitmap.GetHicon());

        Graphics graphics = e.Graphics;

        //Set Image dimension - Users choice
        int iconHeight = 16;
        int iconWidth = 16;

        //Set x/y position - As the center of the RowHeaderCell
        int xPosition = ((e.RowBounds.Height * 2) - iconWidth) / 2;
        int yPosition = ((e.RowBounds.Y + (e.RowIndex * e.RowBounds.Height) - iconHeight) / 2) + e.RowBounds.Height + 1;

        Rectangle rectangle = new Rectangle(xPosition, yPosition, iconWidth, iconHeight);
        graphics.DrawIcon(myIcon, rectangle);
    }
    else if (e.InheritedRowStyle.BackColor == Color.YellowGreen)
    {
        //Convert the image to icon, inorder to load it in the row header column
        Bitmap myBitmap = new Bitmap(imageList1.Images[2]);
        Icon myIcon = Icon.FromHandle(myBitmap.GetHicon());

        Graphics graphics = e.Graphics;

        //Set Image dimension - Users choice
        int iconHeight = 16;
        int iconWidth = 16;

        //Set x/y position - As the center of the RowHeaderCell
        int xPosition = ((e.RowBounds.Height *2) - iconWidth) / 2;
        int yPosition = ((e.RowBounds.Y + (e.RowIndex * e.RowBounds.Height) - iconHeight) / 2) + e.RowBounds.Height + 1;

        Rectangle rectangle = new Rectangle(xPosition, yPosition, iconWidth, iconHeight);
        graphics.DrawIcon(myIcon, rectangle);

    }
    else if (e.InheritedRowStyle.BackColor == Color.White)
    {
        //Convert the image to icon, inorder to load it in the row header column
        Bitmap myBitmap = new Bitmap(imageList1.Images[3]);
        Icon myIcon = Icon.FromHandle(myBitmap.GetHicon());

        Graphics graphics = e.Graphics;

        //Set Image dimension - Users choice
        int iconHeight = 16;
        int iconWidth = 16;

        //Set x/y position - As the center of the RowHeaderCell
        int xPosition = ((e.RowBounds.Height * 2) - iconHeight) / 2;
        int yPosition = ((e.RowBounds.Y + (e.RowIndex * e.RowBounds.Height) - iconHeight) / 2) + e.RowBounds.Height + 1;

        Rectangle rectangle = new Rectangle(xPosition, yPosition, iconWidth, iconHeight);
        graphics.DrawIcon(myIcon, rectangle);

    }

}

そして、検索が完了し、次を使用してデータがグリッドに送信された後、コード内の場所からこのコードを呼び出しています。

grd.RowPostPaint += new System.Windows.Forms.DataGridViewRowPostPaintEventHandler(this.grd_RowPostPaint);

ただし、ソフトウェアを最大化して画像を表示すると問題が発生し、マウスオーバー時にのみ表示される以外のサイズで実行すると (そのようにコード化されていないため、そのように発生するだけです)、スクロールすると画像が消えます。グリッドの一番下...私が間違っていることを考えてください(私は多くの経験を持つコーダーではありません...親切にしてください)。

4

0 に答える 0