Klikalne boksy z obrazkami i inputami

0

Witam serdecznie.

Potrzebuję zrobić w C# za pomocą WinForm'sów listę klikalnych boksów, które będą zawierały PictureBox'a oraz TextBox'a.
Na początku wszystkie boksy powinny mieć obramowanie czerwone, jednak po kliknięciu kolor powinien zmienić się na zielony.
Coś w ten deseń:
user image

Nie mam zbytnio doświadczenia w tworzeniu aplikacji z windowsowymi foremkami, więc nie za bardzo wiem jak do tego podejść.
Będę niezmiernie wdzięczny za pomoc.

Pozdrawiam!

0

Picture box ma zdarzenie MouseClicked czy tam LeftMouseDown, coś w ten deseń. W tym zdarzeniu możesz zmienić obramowanie i zrobić co tam chcesz.

3

Wydaje mi sie, ze najwygodniej bedzie stworzyc osobna kontrolke dziedziczaca po GroupBox, w ktorej przeladujesz sobie OnPaint mniej wiecej tak jak tutaj: http://www.codeproject.com/Tips/388405/Draw-a-Border-around-any-Csharp-Winform-Control
Kolor, ksztalt i inne parametry bordera mozesz sobie wstrzykiwac do tej twojej customowej klasy np ze zdarzenia OnClick komponentow ktore na niej polozysz. Generalnie mozna zrobic osobny UserControl, na niego polozyc CustomGroupBox, TextBox i PictureBox, eventy na klikanie spiac razem i z wewnatrz zmieniac kolorek tego bordera, czy cos w tym guscie;)

0

Rozszerzyłem sobie kontrolkę GroupBox i wyszło całkiem spoko. Mam teraz problem, jak przejechać po wszystkich elementach, które znajdują się w FlowLayoutPanel i wyciągnąć coś z nich?
W panelu znajdują się takie kontrolki:

public class SegmentGroupBox : GroupBox
{
        private Color _borderColor = Color.Black;
        private PictureBox _segmentPic = new PictureBox();
        private TextBox _segmentTxt = new TextBox();
        private Graphics _border;
        private PaintEventArgs _borderArguments; 

        public Color BorderColor
        {
            get { return this._borderColor; }
            set { this._borderColor = value; }
        }
        ...
}

Próbuję to zrobić w taki sposób:

Control ctrl = this.panelZSegmentami;
List<Control> list = ctrl.Controls.OfType<Control>().ToList();
 foreach (var child in list)
{
      var test = child;
}

Jednak nie mogę wyciągnąć składowej 'BorderColor' z child'a. Jak to zrobić?

1

Sprobuj jakos tak:

Control ctrl = this.panelZSegmentami;
 foreach (var child in ctrl.Controls.OfType<SegmentGroupBox>())  //masz same te Twoje customowe GroupBoxy
{
      var test = child.BorderColor = Color.Green;
}

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