2015-12-28 2 views
1

Я пытаюсь развить руки для перехватчиков в покере, но у меня есть проблема, которая на самом деле не знает, как ее решить. С методами ниже:Проблемы с изображениями и прозрачностью

public Replayer() //ctor 
    { 
     InitializeComponent(); 

     pics = null; 
     iCounter = 0; 
     bShow = true; 

     var pos = picTable.PointToScreen(picTable.Location); 
     pos = picTable.PointToClient(pos); 
     picTable.Parent = picBackground; 
     picTable.Location = pos; 
     picTable.BackColor = Color.Transparent; 

     TenPlayerHoldem(); // for only test 
    } 

private void TenPlayerHoldem() // only test 
    { 
     int iCounter = 10; 

     pics = new PictureBox[10]; 

     for(int i = 0; i < iCounter; i++) 
     { 
      pics[i] = new PictureBox(); 
      pics[i].Name = "pics" + i.ToString(); 
      pics[i].Size = new Size(148, 74); 
      pics[i].Image = FreePokerReplayer.Properties.Resources.seatbold; 
      pics[i].SizeMode = PictureBoxSizeMode.StretchImage; 
      pics[i].BackColor = Color.Transparent; 
      pics[i].Visible = true; 
      pics[i].MouseClick += new MouseEventHandler(pics_Click); 
      picTable.Controls.Add(pics[i]); 
     } 

     pics[0].Location = new Point(379, 410); 
     var pos00 = pics[0].PointToScreen(pics[0].Location); 
     pos00 = pics[0].PointToClient(pos00); 
     pics[0].Parent = picTable; 
     pics[0].Location = pos00; 

     pics[1].Location = new Point(188, 377); 
     var pos01 = pics[1].PointToScreen(pics[1].Location); 
     pos01 = pics[1].PointToClient(pos01); 
     pics[1].Parent = picTable; 
     pics[1].Location = pos01; 

     pics[2].Location = new Point(56, 288); 
     var pos02 = pics[2].PointToScreen(pics[2].Location); 
     pos02 = pics[2].PointToClient(pos02); 
     pics[2].Parent = picTable; 
     pics[2].Location = pos02; 

Я получил этот результат: enter image description here

Так с кодом:

//another picturebox  
var poscard = pictureBox1.PointToScreen(pictureBox1.Location); 
poscard = pictureBox1.PointToClient(poscard); 
pictureBox1.Parent = picTable; 
pictureBox1.Location = poscard; 

Результат является: enter image description here

карта я я отрезал ... Я пробовал все, что знал, чтобы решить, но бесполезно. Любая идея, как сделать карту за изображениями, то есть частью карты, будет скрыта без этого «вырезания»?

Благодарен за помощь.

+1

'pics [i] .Size = new Size (148, 74);' Вы пытались изменить эти значения? Они выглядят не так. Для игровой карты высота должна быть в 2 или 3 раза больше ширины. –

+2

use 'BringToFront()' – dotctor

+0

Я бы порекомендовал вам сначала дать нам некоторые значения времени выполнения, такие как @JohnnyMopp, сказал размер карточек и т. Д. –

ответ

0

Комментарии все применяются, но поскольку ваше название упоминает прозрачность вы должны понимать, что существует строго нет прозрачности для перекрытия управления.

Только вложенные элементы управления могут быть прозрачными.

Это, кажется, проблема у вас есть:

  • Похоже, овалы в таблице вложенную, так работает их прозрачность.

  • Но карта и овал ** перекрываются **, поэтому прозрачность между ними не работает.

Вы можете обойти, делая овалы закругленные прямоугольники с использованием region ..

См here for an example, но есть немало других примеров кода вы найдете при поиске «прямоугольник с закругленными углами» ..

Поскольку вам нужно много из них, лучше всего сделать класс RoundedPictureBox!

+0

Спасибо, что TaW фактически округляет прямоугольник, результат лучше, что действительно убивает меня. Метод AddArc - это координаты для идеального пути «овальный прямоугольник» Еще раз спасибо –

+0

Ну, не трогайте их, я бы сказал. При вызове функции «GetRoundPath» вам просто нужно использовать половину высоты в качестве радиуса, нет? – TaW

+0

Ahhh, я еще не понял этот метод, спасибо еще раз. –

Смежные вопросы