How to draw an image in TabPage above nested Buttons

不打扰是莪最后的温柔 提交于 2019-12-11 10:12:04

问题


How to draw image on tabPage overlapping buttons

Black circles(DrawImage on tabPage8_Paint) should be above the buttons:

http://rghost.ru/6sVBl8mkh/image.png

It must be so: http://rghost.ru/6BgDM77pq/image.png

My code

public SibModem() {

    InitializeComponent();

    tabPage8.Paint += new PaintEventHandler(tabPage8_Paint);
    gettime();

    this.SizeChanged += new EventHandler(this.SibModem_Resize);
}

protected void tabPage8_Paint(object sender, PaintEventArgs e) {

    GraphicsUnit units = GraphicsUnit.Pixel;
    base.OnPaint(e);

    Graphics g = e.Graphics;
    g.DrawImage(bg, 0, 0);

    Rectangle srcRect = new Rectangle(offsetant, 0, w, h);
    g.DrawImage(anten, x, y, srcRect, units);

    Rectangle ussdwaitRect = new Rectangle(offsetussd, 0, 64, 64);
    g.DrawImage(ussdwait, usx, usy, ussdwaitRect, units);
}

回答1:


You can't draw above nested controls, so you need to draw parts of the image onto those Buttons.

So combine drawing onto the tabpage and drawing onto the buttons you need to adorn!

Here is a simple example using only one image:

A few class level variables:

Point iLoc = Point.Empty;
Image img = null;
List<Button> overlaidButtons = new List<Button>();

Prepare the image, its position and a list of possibly overlaid buttons:

public Form1()
{
    InitializeComponent();

    string imgN = @"d:\scrape\gears\gear_12x4hand.png";
    img = Image.FromFile(imgN);
    iLoc = new Point(100, 100);
    overlaidButtons.AddRange(new []{button10,button11,button12,button13 });
    // each button calls the same paint event
    foreach (Button btn in overlaidButtons) btn.Paint += btn_Paint;
}

The common Paint event. We calculate the relative position of the image..

void btn_Paint(object sender, PaintEventArgs e)
{
    Button btn = sender as Button;
    e.Graphics.DrawImage(img, new Point(iLoc.X - btn.Left, iLoc.Y - btn.Top));
}

Note that if the Buttons are nested deeper you need to adapt the calculation to include all levels of nesting!

The TabPage Paint event:

private void tabPage5_Paint(object sender, PaintEventArgs e)
{
    e.Graphics.DrawImage(img, iLoc);
}



回答2:


Try BringToFront method, it brings the control to the front of the z-order.

See this reference on MSDN: https://msdn.microsoft.com/en-us/library/system.windows.forms.control.bringtofront(v=vs.110).aspx



来源:https://stackoverflow.com/questions/34195719/how-to-draw-an-image-in-tabpage-above-nested-buttons

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!