2015-04-20 4 views
1

Я делаю простую игру, которая (для основной части) состоит из панели с сеткой из 32 PictureBoxes внутри, каждая с BackgroundImage. Вы нажимаете на «плитку», и она вскрывает изображение. Моя проблема заключается в том, что когда Form Loads, я вижу ее рисование. Я вижу панель, затем пустую PictureBoxes, а затем она заполняет PictureBoxes с помощью BackgroundImages.Visual Basic PictureBox Flicker

Я обратился DoubleBuffer Истина в форме, и я также добавил следующее:

Private Sub UseDoubleBuffer() 

    Me.SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or ControlStyles.DoubleBuffer, True) 
    Me.UpdateStyles() 

End Sub 

который я называю, когда форма нагрузок. Я не уверен, что еще я могу сделать? Я хочу, чтобы он просто «выскочил» на экран. Почему DoubleBuffer не работает? Нужно ли мне вручную вводить код? Я пытался избежать этого, потому что, очевидно, проще просто перетащить в форму, но если понадобится, я сделаю это.

Я не могу опубликовать скриншоты, по-видимому, поскольку мой представитель еще недостаточно высок, но поверьте мне, он выглядит отвратительным, и я хочу сделать это настолько гладким, насколько это возможно. Есть идеи?

+0

Я думаю, что это был дан ответ здесь: [Как отключить обновление формы в Windows Forms] [1] [1]: http://stackoverflow.com/questions/126876/how-do-i-disable-update-a-form-in-windows-формы – dadkind

+2

Изображение, присвоенное свойству BackgroundImage, слишком велико, изменение размера его в соответствии с маленькими ящиками занимает слишком много времени. Таким образом, вы видите, что их рисуют один за другим. Создайте лучшую с программой рисования, которая подходит. Если он по-прежнему занимает слишком много времени (он не должен), вы можете использовать [этот хак] (http://stackoverflow.com/a/3718648/17034). –

ответ

-1

Попробуйте сделать блоки изображений невидимыми (.visible = false) до тех пор, пока они не будут загружены, а затем установите для них видимым значение true для всех из них.

+0

Отлично. Вместо того, чтобы сделать все невидимые Picturebox невидимыми, я попытался сделать панель невидимой вместо этого и установить значение .Visible в True в заявлении Load после моего вызова DoubleBuffer(), и оно работает! – JasonPy

0

Try создание немерцающая пользовательских элементов управления панели:

Вот шаги, чтобы использовать этот элемент управления: 1. Добавить новый класс «NonFlickerPanel» в приложение C#. 2. Замените код с автогенерируемым кодом на C#, показанный ниже. 3. Используйте объект NonFlickerPanel вместо объекта Panel в приложении.

public partial class NonFlickerPanel : Panel 
{ 
    public NonFlickerPanel() : base() 
    { 
      this.SetStyle(ControlStyles.AllPaintingInWmPaint, 
           ControlStyles.UserPaint 
           ControlStyles.OptimizedDoubleBuffer, 
           true); 
    } 
} 
Смежные вопросы