Две разные идеи – две разные проблемы. Прозрачный фон работает = поддержка кликов не работает. Как объединить эти две идC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Две разные идеи – две разные проблемы. Прозрачный фон работает = поддержка кликов не работает. Как объединить эти две ид

Сообщение Anonymous »

В приведенном ниже подходе все работает нормально, логика обрабатывается программой хорошо, но... Мои изображения она загружает "с фоном". Отображается изображение «доски», а затем изображения «пешек». И эти пешки загружаются вместе с фоном (несмотря на настройку pawn.BackColor = Color.Transparent;)

Код: Выделить всё

    public partial class Form1 : Form
{

/////fields
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
InitializeBoard();
InitializeDice();
InitializeWhosTurnLabel();
InitializePawns();
RunGameLoop();
}

private void InitializeBoard()
{
board.ImageLocation = @"C:\..\board.jpg";
board.SizeMode = PictureBoxSizeMode.StretchImage;
board.Size = new Size(500, 500);
board.Location = new Point(0, 0);
this.Controls.Add(board);
}

private void InitializeDice()
{
dice.Size = new Size(150, 150);
dice.Location = new Point(550, 200);
this.Controls.Add(dice);
diceCount = random.Next(1, 7);
}

private void InitializeWhosTurnLabel()
{
whosTurn.Size = new Size(500, 250);
whosTurn.Location = new Point(550, 10);
this.Controls.Add(whosTurn);
}

private void InitializePawns()
{
allPawns.Add(LoadPawns("blue", 72, 130, 360, 415));
allPawns.Add(LoadPawns("yellow", 418, 360, 360, 415));
allPawns.Add(LoadPawns("green", 418, 360, 70, 125));
allPawns.Add(LoadPawns("red", 72, 130, 70, 125));

// Dodaj pionki do Controls formularza
foreach (var pawns in allPawns)
{
foreach (Pawn pawn in pawns)
{
this.Controls.Add(pawn);
pawn.Click += Pawn_Click;
pawn.BringToFront();
}
}
}

private List
 LoadPawns(string color, int x1, int x2, int y1, int y2)
{
List pawns = new List();
Image image = Image.FromFile($@"C:\..\{color}_pawn.png");

for (int i = 0; i < 4; i++)
{
Point location;
switch (i)
{
case 0:
location = new Point(x1, y1);
break;
case 1:
location = new Point(x2, y1);
break;
case 2:
location = new Point(x1, y2);
break;
case 3:
location = new Point(x2, y2);
break;
default:
throw new Exception("Invalid pawn index");
}
Pawn pawn = new Pawn(image, color, location);

pawns.Add(pawn);
}

return pawns;
}

private void Pawn_Click(object sender, EventArgs e)
{
Pawn selectedPawn = (Pawn)sender;

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

Код: Выделить всё

namespace ludo_game
{
public partial class Form1 : Form
{

/////fields

public Form1()
{
InitializeComponent();
this.Load += new EventHandler(Form1_Load);
}

private void Form1_Load(object sender, EventArgs e)
{
InitializeBoard();
InitializeDice();
InitializeWhosTurnLabel();
InitializePawns();
RunGameLoop();
}

private void InitializeBoard()
{
board.Image = Image.FromFile(@"C:\..\board.jpg");
board.SizeMode = PictureBoxSizeMode.StretchImage;
board.Size = new Size(500, 500);
board.Location = new Point(0, 0);
board.Paint += new PaintEventHandler(Board_Paint);
this.Controls.Add(board);
}

private void InitializeDice()
{
dice.Size = new Size(150, 150);
dice.Location = new Point(550, 200);
this.Controls.Add(dice);
diceCount = random.Next(1, 7);
}

private void InitializeWhosTurnLabel()
{
whosTurn.Size = new Size(500, 250);
whosTurn.Location = new Point(550, 10);
this.Controls.Add(whosTurn);
}

private void InitializePawns()
{
allPawns.Add(LoadPawns("blue", 72, 130, 360, 415));
allPawns.Add(LoadPawns("yellow", 418, 360, 360, 415));
allPawns.Add(LoadPawns("green", 418, 360, 70, 125));
allPawns.Add(LoadPawns("red", 72, 130, 70, 125));

board.Invalidate();
}

private List
 LoadPawns(string color, int x1, int x2, int y1, int y2)
{
List pawns = new List();
Image image = Image.FromFile($@"C:\..\{color}_pawn.png");

for (int i = 0; i < 4; i++)
{
Point location;
switch (i)
{
case 0:
location = new Point(x1, y1);
break;
case 1:
location = new Point(x2, y1);
break;
case 2:
location = new Point(x1, y2);
break;
case 3:
location = new Point(x2, y2);
break;
default:
throw new Exception("Invalid pawn index");
}
Pawn pawn = new Pawn(image, color, location);
pawns.Add(pawn);
}

return pawns;
}

private void Board_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
foreach (var pawnList in allPawns)
{
foreach (var pawn in pawnList)
{
g.DrawImage(pawn.Image, new Rectangle(pawn.Location, new Size(10, 16)));
}
}
}

private void Pawn_Click(object sender, EventArgs e)
{
Pawn selectedPawn = (Pawn)sender;

...
}
Как объединить эти два подхода? Или исправить что-нибудь из них?


Подробнее здесь: https://stackoverflow.com/questions/787 ... -works-cli
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Почему фон не удаляется, хотя у моего PNG прозрачный фон?
    Anonymous » » в форуме C#
    0 Ответы
    36 Просмотры
    Последнее сообщение Anonymous
  • Python – Как добавить прозрачный PNG в прозрачный PNG в Tkinter
    Anonymous » » в форуме Python
    0 Ответы
    36 Просмотры
    Последнее сообщение Anonymous
  • Python – Как добавить прозрачный PNG в прозрачный PNG в Tkinter
    Anonymous » » в форуме Python
    0 Ответы
    39 Просмотры
    Последнее сообщение Anonymous
  • Наложение пиглета/прозрачный стиль не прозрачный
    Anonymous » » в форуме Python
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Прозрачный фон DIV
    Гость » » в форуме Html
    0 Ответы
    61 Просмотры
    Последнее сообщение Гость

Вернуться в «C#»