Witam
Pojawił mi się kolejny dziwny problem, którego do końca nie rozumiem - z czego tak naprawdę wynika.
Projektuję program rysujący prymitywy graficzne na kontrolce PictureBox.
Wywołania graficzne ustawione są standardowo
public partial class pb_TestowaPlanszaGraficzna : Form
{
public Graphics pb_DrawArea;
public pb_TestowaPlanszaGraficzna()
{
InitializeComponent();
pb_DrawArea = pb_PlanszaGraficzna.CreateGraphics();
}
Wszystkie klasy dla poszczególnych prymitywów zostały wyprowadzone do plików zewnętrznych, i już wtedy nie mogłem uzyskać wyświetlania na powierzchni kontrolki rysowanych figur.
Problem w klasach podrzędnych od Form1 został rozwiązany poprzez dodanie do konstruktorów delegata w formie:
pb_DrawArea = pb_PlanszaGraficzna;
i wywoływanie pb_DrawArea w każdym konstruktorze.
Program zaczął rysować, zapamiętywać listę obiektów, pozwalał na pełną ich modyfikacje.
Obecnie dostałem za zadanie przerobić go tak, aby między innymi zapisywał wynik pracy z kontrolki PictureBox do pliku w formacie graficznym.
prubowałem użyć standardowej formułki:
SaveFileDialog pb_ZapiszDoPliku = new SaveFileDialog();
pb_ZapiszDoPliku.Filter = "bmp|*.bmp";
pb_ZapiszDoPliku.ShowDialog();
if (pb_ZapiszDoPliku.FileName != "")
pb_PlanszaGraficzna.Image.Save(pb_ZapiszDoPliku.FileName);
Niestety w wyniku dostawałem tylko pusty plik bez grafiki.
Oczywiście działo się tak dlatego, że prubowałem zapisać nieistniejącą wartość Image.
dodałem wiedz odpowiednie przepisanie Bitmapy na wartość Image w formie:
pb_PlanszaGraficzna.Image = new Bitmap(500, 400);
pb_DrawArea = Graphics.FromImage(pb_PlanszaGraficzna.Image);
... ale teraz dla odmiany zapisuje elegancko wszystko co narysuje, ale za to nie kreśli niczego na ekranie.
Oczywiście w celu odświeżenia - odświerzam kontrolke PictureBox
pb_PlanszaGraficzna.Refresh();
Pytanie - jak co zrobić, aby efekt rysowania był również widoczny na ekranie?