Zmiana stanu wyświetlenia picturebox'a

Odpowiedz Nowy wątek
2012-11-22 20:42

Rejestracja: 7 lat temu

Ostatnio: 3 lata temu

0

Mam picture box'a, który zmienia obrazek gdy zmienia się stan w bazie. Ale widzę to dopiero gdy w niego kliknę.
Jak zrobić aby zaraz po uruchomieniu było to widoczne ?

pozdrawiam

Pozostało 580 znaków

2012-11-23 10:16

Rejestracja: 7 lat temu

Ostatnio: 3 lata temu

0

Gdy dodałem Timer i w nim wpisałem kod pobierający info z bazy i wyświetlający obraz to wszystko działa ładnie zaraz po uruchomieniu programu. No ale na dłuższą metę nie można tak robić bo przecież nie będę tworzył Timera do każdego picturebox'a. Chciałem wiec zapytać jak dodać sam Timer do picterbox'a lub czy da się odświeżyć całego Groupbox'a bo w nim są poukładane picturebox'y.

Pozostało 580 znaków

2012-11-23 10:32

Rejestracja: 8 lat temu

Ostatnio: 1 godzina temu

0

Możesz przecież podpiąć jedno zdarzenie pod wiele kontrolek to raz. Dwa to możesz pobrać wszystkie 'childy' kontrolki, czyli np. group box mógłby pobierać informacje dla wszystkich pictureboxów, które zawiera.

edytowany 1x, ostatnio: Sarrus, 2012-11-23 10:33

Pozostało 580 znaków

2012-11-23 11:15

Rejestracja: 7 lat temu

Ostatnio: 3 lata temu

0
Sarrus napisał(a):

Możesz przecież podpiąć jedno zdarzenie pod wiele kontrolek to raz.

hmmm a mógłbyś mi podpowiedzieć jak to zrobić bo nie bardzo wiem jak ....

edytowany 1x, ostatnio: adam_c, 2012-11-23 11:15

Pozostało 580 znaków

2012-11-23 11:53

Rejestracja: 8 lat temu

Ostatnio: 1 godzina temu

0
adam_c napisał(a):
Sarrus napisał(a):

Możesz przecież podpiąć jedno zdarzenie pod wiele kontrolek to raz.

hmmm a mógłbyś mi podpowiedzieć jak to zrobić bo nie bardzo wiem jak ....

A jak podpinasz zdarzenie pod kontrolkę?

Pozostało 580 znaków

2012-11-23 13:27

Rejestracja: 7 lat temu

Ostatnio: 3 lata temu

0

no właśnie nie wiem jak podpiąć picturebox'a pod Timer...

private void timer1_Tick(object sender, EventArgs e)
        {

            if (pictureBox6.Visible)
            {
                timer1.Enabled = true;
            }

?

edytowany 1x, ostatnio: adam_c, 2012-11-23 14:08

Pozostało 580 znaków

2012-11-26 08:10

Rejestracja: 8 lat temu

Ostatnio: 1 godzina temu

0

W zdarzeniu które pokazałeś sprawdzasz czy się zmienił stan w bazie i podmieniasz obrazki tak? Po tej operacji wystarczy jak wywołasz Refresh() na tych pictureboxach, albo na panelu, na którym się znajdują. Może to być też GroubBox i każdy element dziedziczący po Control.

http://msdn.microsoft.com/en-[...]ws.forms.control.refresh.aspx napisał(a)

Forces the control to invalidate its client area and immediately redraw itself and any child controls.

edytowany 3x, ostatnio: Sarrus, 2012-11-26 08:12

Pozostało 580 znaków

2012-11-26 14:11

Rejestracja: 7 lat temu

Ostatnio: 3 lata temu

0
Sarrus napisał(a):

W zdarzeniu które pokazałeś sprawdzasz czy się zmienił stan w bazie i podmieniasz obrazki tak?
</quote>

Dokładnie tak... Picturebox'y osadzone są na GroupBox'ie . Gdy daję refresh() to nic to nie skutkuje.
Próbowałem tak :


private void groupBox1_VisibleChanged(object sender, EventArgs e)
        {
            if (groupBox1.Visible)
            {
                timer1.Enabled = true;
            }

Lecz też to nie skutkuje. Picturebox'y działają pobierają dane ale wyświetlają się tylko wtedy gdy w nie kliknę...

edytowany 1x, ostatnio: adam_c, 2012-11-26 14:23

Pozostało 580 znaków

2012-11-26 14:35

Rejestracja: 8 lat temu

Ostatnio: 1 godzina temu

0

Tak to powinno mniej więcej działać:

private void timer1_Tick(object sender, EventArgs e)
{
    bool stanWBazieSieZmienil = SprawdzStanWBazie();
    if (stanWBazieSieZmienil)
    {
        groupBox1.Refresh();
    }
}

private void groupBox1_VisibleChanged(object sender, EventArgs e)
{
   timer1.Enabled = groupBox1.Visible;
}

Upewnij się, że zdarzenie Ci się wywołuje.

edytowany 1x, ostatnio: Sarrus, 2012-11-26 14:36

Pozostało 580 znaków

2012-11-28 10:22

Rejestracja: 7 lat temu

Ostatnio: 3 lata temu

0

private void timer1_Tick(object sender, EventArgs e)
        {
 try
            {
                myConnection.Open();
                SqlCommand myCommand = new SqlCommand("Command String", myConnection);
                myCommand.CommandText = "SELECT state FROM stan WHERE state = @stany";

                SqlParameter parameter = new SqlParameter();
                parameter.ParameterName = "@stany;
                parameter.SqlDbType = SqlDbType.Int;
                parameter.Direction = ParameterDirection.Input;
                myCommand.Parameters.Add(parameter);
                object val = myCommand.ExecuteScalar();

                int state = System.Convert.ToInt32(val);

Pobieram stany z bazy dla wszystkich urządzeń , jak mam w pętli odświeżyć wszystkie picturebox'y ?

edytowany 1x, ostatnio: adam_c, 2012-11-28 10:22

Pozostało 580 znaków

2012-11-28 11:08

Rejestracja: 8 lat temu

Ostatnio: 1 godzina temu

0
adam_c napisał(a):

Pobieram stany z bazy dla wszystkich urządzeń , jak mam w pętli odświeżyć wszystkie picturebox'y ?

W pętli możesz przeiterować się po wszystkich kontrolkach. Na przykład załóżmy, że wszystkie są w groupBox1:

foreach (Control c in groupBox1.Controls)
{
   if (c is PictureBox)
  {
      (c as PictureBox).Image = ....; //przykładowo
  }
}

Można to jeszcze lepiej zrobić za pomocą linq, ale to temat na następną lekcję ;]

Pozostało 580 znaków

Odpowiedz

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