Меня попросили написать графический интерфейс, который позволит размещать объекты внутри контейнера. Пользователь будет просматривать поля сверху вниз. Они также хотели бы видеть, что уложено внутри. Моей первой мыслью решить эту проблему была прозрачность. Я прочитал некоторые посты о прозрачности, однако не нашел ни одного, который бы решал проблемы прозрачности обоих изображений, чтобы вы могли видеть оба, если они сложены.
Как мне сделать элемент управления прозрачным с другими элементами управления сверху. Если это не реально возможно; Как лучше подойти к этой проблеме?
Я использую пользовательский элемент управления (открытый частичный класс MyControl: Control) для решения проблемы. У меня наконец-то изображение на контроле прозрачное. Все, что нарисовано в родительской форме, показывает через изображение (я использую onPaint для родителя, чтобы нарисовать эллипс и квадрат), однако другие элементы управления, размещенные над ним, больше не прозрачны.
Код, который я использую для этого, приведен ниже:
public Image Image
{
get { return m_Image; }
set { m_Image = value; }
}
private void GridControl_Paint(object sender, PaintEventArgs e)
{
if (Image != null)
{
Graphics g = e.Graphics;
Bitmap bitMap = new Bitmap(Image);
//This is not working... the color array always comes back empty
//This is how I would rather making things transparent...
Color[] colorArray = bitMap.Palette.Entries;
if (colorArray.Length > 0)
{
ColorMap[] colorMap = new ColorMap[colorArray.Length];
for (int index = 0; index < colorArray.Length; index++)
{
colorMap[index] = new ColorMap();
colorMap[index].OldColor = colorArray[index];
colorMap[index].NewColor = Color.Transparent;
}
}
//Ok fine so the above is not working... let me force it.
//Get each pixel in the image and change the color.
else
{
for (int x = 0; x < bitMap.Width; x++)
{
for (int y = 0; y < bitMap.Height; y++)
{
Color pixelColor = bitMap.GetPixel(x, y);
Color newColor = Color.FromArgb(100, pixelColor);
bitMap.SetPixel(x, y, newColor);
}
}
}
bitMap.MakeTransparent();
g.DrawImage(bitMap, this.ClientRectangle);
}
}