ZamianZ Ответов: 2

Измените динамически создаваемый задний цвет pictureboxes


У меня возникла проблема с изменением заднего цвета динамически создаваемого pixturebox при нажатии на picturebox. Этот код должен изменить задний цвет "currentpiece", но это не так, или я что-то упускаю? Пожалуйста, любая помощь ценится

Что я уже пробовал:

private void PieceClick(object sender, EventArgs e)
{
    RefressChessBoard();

    //Get the properties of the picturebox selected
    CurrentPiece = (PictureBox)sender;

    if (PieceMove)
    {
        foreach (PictureBox chessPiece in AllPieces)
	{
	    chessPiece.BackColor = Color.Transparent;
	    chessPiece.Visible = false;
	}
    }
    if (!PromotePawn)
    {
        //get the x coordinate  of the selected piece
	FromX = CurrentPiece.Left / 100;
	FromX = Convert.ToInt32(Math.Floor(FromX));

	//get the y coordinate of the selected piece
	FromY = CurrentPiece.Top / 100;
	FromY = Convert.ToInt32(Math.Floor(FromY));
 
	if (chessEngine.isPlayerPiece((byte)FromX, (byte)FromY))
	{
	     //Get the Piece that was selected
	     PieceSelected = chessEngine.CurrentBoard.GetPieceAtPosition((byte)FromX, (byte)FromY);

	     //Check if the player selected a pawn
	     if (CurrentPiece.Name == enPieceType.WhitePawn.ToString() || CurrentPiece.Name == enPieceType.BlackPawn.ToString())
             {
		  PossibleMoves = chessEngine.GetMoves((byte)FromX, (byte)FromY);
		  CurrentPiece.BackColor = Color.OliveDrab;
		  PieceMove = true;
	     }

	     DisplayAllPossibleMoves();
	}
}

2 Ответов

Рейтинг:
2

BillWoodruff

Предполагая, что это приложение WinForm:

1. степень, в которой "задний цвет" PictureBox будет видимый будет зависеть от:

а. степень прозрачности текущего изображения "PictureBox"

и:

б. значения свойства "заполнение", которое смещает изображение из области отображения.

Итак, ваши файлы images .png имеют некоторую степень прозрачности или вы манипулируете изображениями в каком-то другом формате, чтобы сделать их прозрачными ?

Вы хотите, чтобы "BackColor" отображался только вокруг пограничной области, сделанной видимой с помощью настроек заполнения ?


Рейтинг:
0

OriginalGriff

Это будет зависеть от остальной части вашего приложения, а у нас нет доступа к нему. Он также, вероятно, будет нуждаться в том, чтобы ваше приложение работало в то время, чтобы понять, что происходит, и у нас, конечно же, нет доступа к этому!

Так что все будет зависеть от тебя.
К счастью, у вас есть инструмент, который поможет вам выяснить, что происходит: отладчик. Если вы не знаете, как его использовать, то быстрый Google для "Visual Studio debugger" должен дать вам необходимую информацию.

Поместите точку останова в первую строку функции и запустите код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что то, что вы ожидали, произойдет именно так, как и произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

Извините, но мы не можем сделать это за вас - пришло время вам освоить новый (и очень, очень полезный) навык: отладку!


ZamianZ

Я попробовал отладку и поставил часы на все свойства "CurrentPiece", и из того, что я вижу, он действительно меняет его, но он не хочет менять это на форме, что очень сбивает меня с толку, потому что после этого я даже не прикасаюсь к нему.

OriginalGriff

Поэтому начните с добавления отдельного графического окна "кусок" в дизайнере, добавьте обработчик к нему и ничего больше не делайте - не добавляйте изображения, ничего.
Затем нажмите и посмотрите, что произойдет. Вы получаете правильный "кусок" в отладчике? меняется ли фон? Следуйте коду через весь метод и посмотрите, что произойдет.
Мы не можем сделать это для вас!