zmiana panela

0

Jak zrobić, aby za pomocą strzałek po lewej i prawej stronie można wyło zmieniać sobie panele i była jeszcze opcja zmiany panela na kropkach na dole.

lct2r.png

Program w C# (Windows Form Application).

Może ktoś coś takie robił to bym prosił o załącznik z projektem.

0

BlueNight2010 ustaw sobie np. dla formy taki kolor zielony jak tam masz jako tło. Zrób sobie np. dwa przyciski, jeden z lewej, drugi z prawej, i dla tego z lewej strony daj opcję BackgroundImage obrazek ze strzałką w lewo, analogicznie zrób z drugim przyciskiem. Obsłuż sobie później zdarzenia Click i tam rób zmiany paneli.

Co do kropek na dole zrób podobnie, mogą to być np. jakieś radioButtony, czy cokolwiek innego, nawet 3 przyciski.

Mam nadzieję, że o coś takiego Ci chodziło?

Pozdrawiam
Łukasz Gawron

0

Tak, a mógłbyś mi zrobić ten projekt bo nie mam pojęcia co wstawić do kodu.

0

Sorry, ale masz rozwiązanie podane. Musisz sam się postarać ;p

0

CZARNO to widzę. Wiem, że mam stary wypalony już kineskop, a z boku jeszcze mi słońce świeci, ale i tak uważam, że program robisz za ciemny.

0

Masz tutaj, tylko zamiast labeli użyj przycisków o kształcie własnych grafik. Potem klikasz dwa razy na ten przycisk w Designerze i powstaje zdarzenie Click, tam wpisz odpowiedni kod. Najlepiej napisać sobie metodę, która będzie na przykład jako argumenty przyjmować Panel, kolor panelu i potem pod przyciskami ją wywoływać.

0

Nie do końca o to mi chodziło. Opisze to bardziej dokładnie:

Mam 3 panele (panel1, panel2, panel3) i coś tam napisane na każdym panelu i chce za pomocą strzałek i kropek zmieniać te panele.

0

To może użyj np. panel2.Show();, pod przyciskami lub panel2.Visible = true; wcześniej ustawiasz na false po kliknięciu przycisku zmieniasz.

0

Zrobiłem tak jak napisałeś Newbie11 i jest jakiś błąd bo nie chce wejść na 3 panel, albo źle chodzi nie poklei wyświetla panele.

0

Chyba nie umiem Ci pomóc, że chyba taki sposób wyboru panelu Cie zadowoli. Może jak będzie somekind to Ci pomoże.

0

Dzięki Newbie11 za dobre chęci, ale nie zadowala mnie takie rozwiązanie.

0

No dobra, a po co te trzy panele jeden na drugim?

0

W każdy panel chce coś tam wstawić np. labelek i pictorebox z obrazkiem. Przydałoby się zrobić tak, aby te panele jeden na drugim za pomocą strzałek na zmianę się wyświetlały. Chciałem żeby to chodziło na 3 panelach, ale jak się nie do to przynajmniej na dwóch, ale wolałbym żeby było na 3 panelach zrobione. Wtedy więcej miejsca będę miał na wstawianie swoich komponentów.

Sorry, że post pod postem, ale czy mógłby ktoś mi pomóc?

0

Takie podejście sprawiać będzie kłopoty, chociażby dlatego, że operując w designerze, jeden panel ustawi Ci się jako dziecko drugiego, a nie o takie coś Ci chodzi. W takiej sytuacji jak ta lepiej byłoby stworzyć swoje UserControlki i wyświetlać oraz ukrywać je dynamicznie.
I trochę nie rozumiem w czym problem z obecnym rozwiązaniem. Po kliknięciu w przycisk powinieneś ustawić wszystkim panelom Visible na false, a true ustawić tylko temu, który ma być widoczny.

0

nie lepiej zrobic 3 formy ?

0

przecieŻ tak zrobiłem i nie działa (ostatni załącznik na forum). A z tymi UserControlkami nie próbowałem i nie wiem jak za to się zabrać.

0

Trochę z tym zabawy, ale teraz chyba działa tak jak chciałeś Bluenight2010. Efekt do pobrania.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace _3PaneleSposob2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            panel1.Visible = true;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            panel2.Visible = true;
            panel1.Visible = false;
            panel3.Visible = false;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            panel3.Visible = true;
            panel1.Visible = false;
            panel2.Visible = false;
        }

        private void button4_Click(object sender, EventArgs e)
        {
            panel1.Visible = true;
            panel2.Visible = false;
            panel3.Visible = false;
        }

        private void button3_Click(object sender, EventArgs e)
        {
            panel3.Visible = true;
            panel1.Visible = false;
            panel2.Visible = false;
        }

        private void button6_Click(object sender, EventArgs e)
        {
            panel2.Visible = true;
            panel3.Visible = false;
            panel1.Visible = false;
        }

        private void button5_Click(object sender, EventArgs e)
        {
            panel1.Visible = true;
            panel2.Visible = false;
            panel3.Visible = false;
        }

        private void radioButton1_CheckedChanged(object sender, EventArgs e)
        {
            panel2.Visible = true;
            panel1.Visible = false;
            panel3.Visible = false;
        }

        private void radioButton2_CheckedChanged(object sender, EventArgs e)
        {
            panel3.Visible = true;
            panel1.Visible = false;
            panel2.Visible = false;
        }

        private void radioButton3_CheckedChanged(object sender, EventArgs e)
        {
            panel1.Visible = true;
            panel2.Visible = false;
            panel3.Visible = false;
        }

        private void radioButton4_CheckedChanged(object sender, EventArgs e)
        {
            panel3.Visible = true;
            panel1.Visible = false;
            panel2.Visible = false;
        }

        private void radioButton5_CheckedChanged(object sender, EventArgs e)
        {
            panel1.Visible = true;
            panel2.Visible = false;
            panel3.Visible = false;
        }

        private void radioButton6_CheckedChanged(object sender, EventArgs e)
        {
            panel2.Visible = true;
            panel1.Visible = false;
            panel3.Visible = false;
        }
    }
}


 
0

@Newbie11 - jakbyś napisał taką metodę:

private void ShowPanel(Panel panel)
{
    foreach (var p in this.allPanels)
    {
        p.Hide();
    }

    panel.Show();
}

A potem ją odpowiednio wywoływał, czyli np.:

private void button2_Click(object sender, EventArgs e)
{
    this.ShowPanel(this.panel2);
}
 
private void button1_Click(object sender, EventArgs e)
{
     this.ShowPanel(this.panel3);
}

To byłoby to znacznie czytelniejsze.

Mi w tym wszystkim nie podoba się jedno - nowa para przycisków na każdym panelu.

0

Zrobiłem coś takiego, ale nie widać Panelu2 zaraz po uruchomieniu programu. Reszta działa, jak ktoś by umiał usunąć ten problem to bym był wdzięczny.

0

panel2 jest u Ciebie na panelu3, a powinien być na panelu1. Po prostu w designerze trudno jest tak zgrabnie ułożyć kontrolki jedna na drugiej, poprawiłem plik designer.cs ten jest prawidłowy: http://wklej.org/hash/70f92e8c486/

Słabe jest to rozwiązanie, uważam, że na powinieneś zrobić UserControlki i je podmieniać zamiast sterować tymi panelami, bo to tylko komplikuje pracę.
Druga sprawa - użycie PictureBoxów jako przycisków graficznych to moim zdaniem dziwny pomysł. Button z ustawionym Image nie wystarcza?

0

a możesz mi napisać w którym miejscu zmieniłeś w kodzie, bo ciężko mi znaleźć błąd w poprzednim projekcie

0

Dodałem linijkę 99:

this.panel1.Controls.Add(this.panel2);

I edytowałem linijkę 160:

this.panel2.Location = new System.Drawing.Point(43, 3);

Za to usunąłem linijkę gdzieś w okolicach 110:

this.panel3.Controls.Add(this.label12);

Tylko, designer.cs nie służy do edycji przez programistę i nie powinno się tego w ogóle robić.

0

Ok, dzięki

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