سؤال

حاولت ضبط لون الخلفية لوجهة نظر شبكة البيانات لتكون "شفافة" من الخصائص ولكنها قلت "ليست خاصية صالحة".

كيف يمكنني فعل ذلك؟

هل كانت مفيدة؟

المحلول

فعلت هذا الحل لمشكلة محددة (عندما تم احتواء الشبكة في نموذج مع صورة خلفية) مع تعديلات المبسط، يمكنك تكييفها لإنشاء شبكة شفافة عامة، فقط اسأل عما إذا كان لدى الوالد صورة خلفية، استخدم فقط Backcolor الوالد لطلاء شبكتك، وهذا كل شيء.

يجب أن ترث من DataGridView وتجاوز طريقة ورد الوزن مثل هذا:

protected override void PaintBackground(Graphics graphics, Rectangle clipBounds,  Rectangle gridBounds)
  {
    base.PaintBackground(graphics, clipBounds, gridBounds);
    Rectangle rectSource = new Rectangle(this.Location.X, this.Location.Y, this.Width, this.Height);
    Rectangle rectDest = new Rectangle(0, 0, rectSource.Width, rectSource.Height);

    Bitmap b = new Bitmap(Parent.ClientRectangle.Width, Parent.ClientRectangle.Height);
    Graphics.FromImage(b).DrawImage(this.Parent.BackgroundImage, Parent.ClientRectangle);


    graphics.DrawImage(b, rectDest, rectSource, GraphicsUnit.Pixel);
    SetCellsTransparent();
  }


public void SetCellsTransparent()
{
    this.EnableHeadersVisualStyles = false;
    this.ColumnHeadersDefaultCellStyle.BackColor = Color.Transparent;
    this.RowHeadersDefaultCellStyle.BackColor = Color.Transparent;


    foreach (DataGridViewColumn col in this.Columns)
    {
        col.DefaultCellStyle.BackColor = Color.Transparent;
        col.DefaultCellStyle.SelectionBackColor = Color.Transparent;
    }
}

نصائح أخرى

لقد فعلت هذا بمحلول Dembreme ويعمل، ولكنه يسبب بعض المشاكل التي تجنبتها بإضافة تحسينات صغيرة:

أ. التمرير DGV يفسد الخلفية. الحل: ضع هذا في مكان ما:

public partial class main : Form
{ 
    protected override CreateParams CreateParams 
    {
    get
        {
        CreateParams cp = base.CreateParams;
        cp.ExStyle |= 0x02000000;
        return cp;
        }
    }
}

ستظل الخلفية تمرير، ولكن يتم تصحيحها مباشرة بعد كل خطوة تمرير. من الملاحظ، لكن كان مقبولا بالنسبة لي. هل يعرف أحد حلا أفضل لدعم التمرير بهذا؟

ب. المصمم لديه مشاكل باستخدامه. المحلول:

protected override void PaintBackground(Graphics graphics, Rectangle clipBounds, Rectangle gridBounds)
{
    base.PaintBackground(graphics, clipBounds, gridBounds);
    if (main.ActiveForm != null && this.Parent.BackgroundImage != null)
    {
        Rectangle rectSource = new Rectangle(this.Location.X, this.Location.Y, this.Width, this.Height);
        Rectangle rectDest = new Rectangle(-3, 3, rectSource.Width, rectSource.Height);
        Bitmap b = new Bitmap(Parent.ClientRectangle.Width, Parent.ClientRectangle.Height);
        Graphics.FromImage(b).DrawImage(this.Parent.BackgroundImage, Parent.ClientRectangle);
        graphics.DrawImage(b, rectDest, rectSource, GraphicsUnit.Pixel);
        SetCellsTransparent();
    }
}

الآن المصمم يعامله تماما مثل DGV. سوف تفشل إذا كنت ترغب في رسم DGV بينما لا يوجد لديك أوري معلومات، ولكن هذا ليس هو الحال عادة. من الممكن أيضا الحفاظ على الخط إذا كنت لا تزال ترغب في استخدام المصمم وحذفه للإصدار.

وجود لون شفاف في خاصية DataGridView BackgroundColor غير ممكن.

لذلك قررت مزامنة هذه الخاصية مع backcolor الوالد. ميزة البيانات القديمة الجيدة ل WinForms جيدة جدا في هذا:

myDataGridView.DataBindings.Add(nameof(DataGrid.BackgroundColor), 
                                this, 
                                nameof(Control.BackColor));

بعد ذلك مباشرة InitializeComponents();

أعلم أن هذا قديم جدا، لكن هذا يعمل بشكل جيد للغاية.

قم بتعيين BackColor الخاص ب DataGridView مع لون النموذج. للقيام بذلك، حدد DataGridView: انتقل إلى الخصائص -> RowTemplate -> DefaultCellStyle -> Backcolor واختر لون النموذج الخاص بك.

تحتاج إلى تعيين جميع الصفوف والأعمدة للشفافية. طريقة أسهل هي:

for (int y = 0; y < gridName.Rows[x].Cells.Count; y++)
{
     yourGridName.Rows[x].Cells[y].Style.BackColor =
     System.Drawing.Color.Transparent;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top