Конечной целью является играбельная игра памяти. В настоящее время я застрял в проблеме рендеринга. У меня есть следующие классы:
Поле , которое является абстрактным UserControl
:
public abstract class Field : UserControl
{
protected PictureBox _pictureBox;
public Field()
{
_pictureBox = new PictureBox();
_pictureBox.Image = Properties.Resources.empty;
_pictureBox.SizeMode = PictureBoxSizeMode.StretchImage;
_pictureBox.BorderStyle = BorderStyle.FixedSingle;
this.Controls.Add(_pictureBox);
}
// ...
// some abstract methods, not currently important
}
MemoryField , которое происходит от поля:
public class MemoryField : Field
{
public MemoryField(Form parent, int xPos, int yPos, int xSize, int ySize)
{
_pictureBox.ClientSize = new Size(xSize, ySize);
_pictureBox.Location = new Point(xPos, yPos);
_pictureBox.Parent = parent;
}
// ...
}
И, наконец, MainForm , который является точкой входа для моего приложения:
public partial class MainForm : Form
{
private readonly int fieldWidth = 100; // 150 no rendering problems at all
private readonly int fieldHeight = 100;
public MainForm() { InitializeComponent(); }
private void MainForm_Load(object sender, EventArgs e)
{
for (int y = 0; y < 6; y++) // 6 rows
{
for (int x = 0; x < 10; x++) // 10 columns
{
Field field = new MemoryField(this,
x * (fieldWidth + 3), // xPos, 3 is for a small space between fields
labelTimer.Location.Y + labelTimer.Height + y * (fieldHeight + 3), // yPos
fieldWidth,
fieldHeight);
this.Controls.Add(field);
}
}
}
}
Вот где моя проблема: в этих for
петли Я пытаюсь сгенерировать сетку 6x10 размером Field
с (каждый из которых содержит PictureBox
100x100 пикселей в размере). Я делаю это почти успешно, так как мое второе поле отображается неправильно:
Единственное, что я обнаружил, что работает (полностью устраняет проблему), делает поле больше (т.е. 150px),С другой стороны, уменьшение его (т. Е. 50 пикселей) делает проблему еще больше:
Может быть полезная информация и вещиЯ пробовал:
- Моя MainForm
AutoSize = true;
с AutoSizeMode = GrowAndShrink;
- Моя MainForm (изначально) не содержит никаких компонентов, кроме
menuStrip
и label
- Я попытался изменить свойство
PictureBox.Image
, чтобы не работало. - Я попытался создать сетку только с элементами управления
PictureBox
(без использования Field
как оболочка * 1056), что сработало . - Я попытался поместить
labelTimer
в эту "проблемную область", которая действительно решает проблему в зависимости откуда именно я это положил. (потому что расположение поля зависит от положения и высоты labelTimer
) - Я пытался перезапустить Visual Studio 2017, не работал.
КонечноЯ мог бы просто изменить размер на 150px и двигаться дальше, но мне действительно любопытно посмотреть, в чем корень этой проблемы. Спасибо!