Я пытался отобразить изображение с прозрачной рамкой в качестве фона для элемента управления.Управление чертежом с прозрачным фоном
К сожалению, прозрачная область создает отверстие в родительской форме следующим образом:
В изображении выше, форма имеет красный фон, который я надеялся увидеть за моим контролем в прозрачные области.
Код я использовал следующим образом:
protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
{
if (this.Image != null)
{
Graphics g = Graphics.FromImage(this.Image);
ImageAttributes attr = new ImageAttributes();
//set the transparency based on the top left pixel
attr.SetColorKey((this.Image as Bitmap).GetPixel(0, 0), (this.Image as Bitmap).GetPixel(0, 0));
//draw the image using the image attributes.
Rectangle dstRect = new Rectangle(0, 0, this.Image.Width, this.Image.Height);
e.Graphics.DrawImage(this.Image, dstRect, 0, 0, this.Image.Width, this.Image.Height,
GraphicsUnit.Pixel, attr);
}
else
{
base.OnPaint(e);
}
}
protected override void OnPaintBackground(System.Windows.Forms.PaintEventArgs e)
{
//base.OnPaintBackground(e);
}
Этот класс наследуется от PictureBox, потому что мне нужен был контроль, который реализует OnMouseMove и OnMouseUp событий.
Я изучаю большую часть дня без успеха, проверяя различные идеи, но, к сожалению, большинство из них работают только на полной основе, а не на .Net CF.
Любые идеи были бы высоко оценены.
Вау, спасибо за это. Очень полезное и подробное объяснение. Вы, конечно, потратили некоторое время на эту тему. –
@ctacke Я придумал решение Transparency, которое очень близко к вашему, и оно работает как в дизайнере, так и во время выполнения. Недавно я понял, что мое решение не будет работать, когда вложенные элементы управления контейнерами, потому что вещь «Parent.Parent» не работает. Я попытался переключить «Parent.Parent» на this.TopLevelControl, который работает во время выполнения, но не во время разработки. Где вы когда-либо могли получить решение для вложения прозрачных элементов управления внутри элементов управления контейнерами и все еще иметь конструктор, который делает ваш контроль прозрачным? –
Я отказался даже от попыток получить дизайнерскую поддержку для своих элементов управления несколько лет назад. Это просто никогда не чувствовало, что это важно для меня и всегда было хрупким.Иногда это срабатывало, иногда это было не так, и я обнаружил, что сжигаю дни, фактически не делая ничего производительного, поэтому я просто никогда не беспокоюсь о том, чтобы дизайнер больше не укладывал прямоугольники, где будут проходить элементы управления. – ctacke