Jak dynamiczne dodawać grafiki do PictureBox w C#?

0

Witam
Uczę się C#. Pracuje w Visual Studio C# 2010

Próbuje dodać obrazek do dynamicznego pictureBox'a.
Wstawiłem do projektu w VS komponent pictureBox i dodałem do niego grafikę.
Następnie dynamicznie utworzyłem tablice PictureBox'ów i w pętli nadałem im potrzebne właściwości.
I wszystko jest dobrze, dopóki nie dodaje lini ,którą kopiuje z pliku Form1.Disigner.cs. do Form1.cs

Linia oryginalna przed modyfikacją:

this.pictureBox4.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));

Linia po modyfikaji do tablicy PictureBox'ów:

pole[1,3].Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));

Dostaje komunikat:
The name 'resources' does not exist in the current context.

Próbowałem różnych sposobów. Szukałem w Google jakiś zrozumiałych informacji jak korzystać z tego komponentu.
Jednak nie znalazłem nic zrozumiałego, co potrafiłbym zastosować.

Może ktoś wytłumaczył by mi i innym użytkownikom forum ,możliwie wyczerpująco, o co w tym chodzi?

np:

  • jakie wartości i jakiego typu przyjmuje pole Image?
  • Jak korzystać z resources?
  • Jak dodać grafikę do kompilowanego programu?
  • Jak pobierać ją z zewnętrznego pliku?

Z góry dziękuję za pomoc.

0

Wszystko masz wyjaśnione w komunikacie błędu: "resources does not exist in the current context". On nie wie, co to "resources". Sprawdź, jak masz to zdefiniowane w designer.cs

0

Właśnie tego nie rozumiem. To są części tej samej klasy. Ta sama przestrzeń nazw. Przecież nie mogę w klasie zrobić odniesienia do niej samej.
Podonie wrzucenie zmiennej pole do pliku designer.cs powoduje ten sam błąd. Dlaczego?

0

resources.GetObject("pictureBox1.Image")

Czy ty przypadkiem nie chcesz wyciągnąć obrazka z pictureBox1.Image, a nie resources? A może spróbuj załadować obrazek z pliku Image.FromFile

0

Skoro Edytor Graficzny wysyła plik do pictureBox.Image to ja chciałem zrobić to samo. I nie ma problemu w podmianie obrazków między boksami, przez zmianę końcówki ich nazwy, na inną istniejącą w innym boksie, ale w ramach pliku Form1.Designer.cs Wszystko się wyświetla zgodnie z złożeniem. Ale kiedy próbuje to samo zrobić w pliku Form1.cs pojawia się błąd.

W pliku Form1.Designer.cs nie ma żadnego using. A są w pliku Form1.cs. A jednak to działa i korzysta z using podanego w pliku Form1.cs

1

To jest taka sytuacja przedstawiona łopatalogicznie w Designer masz

partial class Form1
{
      private void InitizalizeComponent()
      {
              Foo foo = new Foo();
              foo.DoSomething();
       }
}

Ty natomiast skopiowałeś to w taki sposób:

public void Method1()
{
       foo.DoSomething();
}

Zauważysz, że ten partial Designer'a tworzy obiekt resource wewnątrz prywatnej metody o właśnie tak.

System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));

Zresztą źle sie zabierasz do problemu. Po co ta dwuwymiarowa tablica PictureBox'ów ? Chcesz obrazy przetrzymywać w wielowymiarowej tablicy obiektów klasy, która służy jako kontrolka graficzna ? To tak jakby do przechowywania danych użytkownika jak nazwisko przechowywać w instancji klasy TextBox.

0

Tablica jest po to, aby pokazywać lub ukrywać pionki na szachownicy. Chciałem to realizować przez dodawanie lub usuwanie grafiki na polu[x, y]
Nawet jeśli zrobię planszę jako. tło graficzne i pionki jako pictureBox'y o zmiennej pozycji, to i tak muszę stworzyć 24 pionki po 12 na jeden kolor i jeszcze jakoś oznakować damki. Rozumiem, że resource jest zdefiniowane w innej procedurze niż moje pionki. Jak się do nich dostać z procedury _Load głównej formy. Wszystkie moje procedury przestawiłem na public.

A swoją drogą mariano901229 ciekaw jestem, jak problem można podejść inaczej? Rysunek planszy umieszczony na canvas głównej formy?

1 użytkowników online, w tym zalogowanych: 0, gości: 1