• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Windows Forms - 2 kontrolki użytkownika - jak kontrolować z 1 właściwości drugiej?

VPS Starter Arubacloud
0 głosów
916 wizyt
pytanie zadane 14 lipca 2018 w C# przez Paweł Makarewicz Nowicjusz (210 p.)

Cześć, Potrzebuje pomocy. W Form-sie znajdują się dwie kontrolki użytkownika, w pierwszej textbox i button, a w drugiej tylko button. Potrzebuje zrobić tak aby po wprowadzeniu znaków w textbox-ie oba button-y zmieniły kolor a następnie po kliknięciu któregokolwiek button-a znowu wróciły do poprzedniego koloru.

Mój problem polega na tym iż nie mogę się dobrać z jednej kontrolki do drugiej. Próbowałem w sposób przedstawiony w kodzie ale bez rezultatu. Będę wdzięczny za pomoc w znalezieniu najlepszego rozwiązania problemu.

using System;
using System.Windows.Forms;

namespace dwie_formatki
{
    public partial class Archiwum : UserControl
    {

        Ustawienia ust = new Ustawienia();

        public Archiwum()
        {
            InitializeComponent();
        }

        private void textBox_TextChanged(object sender, EventArgs e)
        {
            this.btnArchiwum.BackColor = System.Drawing.Color.DarkRed;
            ust.Controls["btnUstawienia"].BackColor = System.Drawing.Color.DarkRed;
        }

        private void btnArchiwum_Click(object sender, EventArgs e)
        {
            this.btnArchiwum.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224)))));
            ust.Controls["btnUstawienia"].BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224)))));
        }
    }
}

2 odpowiedzi

+1 głos
odpowiedź 14 lipca 2018 przez profesorek96 Szeryf (91,420 p.)
komentarz 14 lipca 2018 przez Paweł Makarewicz Nowicjusz (210 p.)
Dzięki wielkie za naprowadzenie na właściwy tor. Z tego co widzę nie jest to takie proste do wykonania ale walczę z tym :)
komentarz 14 lipca 2018 przez profesorek96 Szeryf (91,420 p.)
Proszę bardzo :)
komentarz 15 lipca 2018 przez Paweł Makarewicz Nowicjusz (210 p.)

W przypadku UserControl wartość jest przekazywana przez delegaty ale już kontrolka Button2 nie odświeża się (kolor nie zmienia się).

Znalazłem rozwiązanie bardzo proste i myślę że najlepsze, więc chyba delegaty są tu nadgorliwością...

Mój kod wygląda następująco:

    public partial class UserControlA : UserControl
    {
        public UserControlA()
        {
            InitializeComponent();
        }
        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            btnSave.BackColor = Color.DarkRed;
            var controlB = Parent.Controls.OfType<UserControlB>().FirstOrDefault();
            controlB.BtnColorB = Color.DarkRed;
        }
    }

I UserControlB:

    public partial class UserControlB : UserControl
    {
        public Color BtnColorB
        {
            get { return this.btnSaveB.BackColor; }
            set { this.btnSaveB.BackColor = value; }
        }
        public UserControlB()
        {
            InitializeComponent();
        }
    }

Może komuś się przyda.

Pozdrawiam

+1 głos
odpowiedź 14 lipca 2018 przez Crash182 Gaduła (3,600 p.)

Oj, wiele czasu minęło od kiedy pisałem coś w Winforms no ale czego się nie robi żeby pomoc drugiej osobie :P

U mnie coś takiego działa bez problemu: 

using System;
using System.Drawing;
using System.Windows.Forms;

namespace ButtonsDemo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            ChangeButtonsBackColor(Color.DarkRed);
        }

        private void btnArchiwum_Click(object sender, EventArgs e)
        {
            ChangeButtonsBackColor(default(Color));
        }

        private void btnUstawienia_Click(object sender, EventArgs e)
        {
            ChangeButtonsBackColor(default(Color));
        }

        private void ChangeButtonsBackColor(Color color)
        {
            btnArchiwum.BackColor = color;
            btnUstawienia.BackColor = color;
        }
    }
}

PS. Jedyna różnica to taka ze zamiast UserControl użyłem Panel a to dlatego ze używam VS2017 i chyba UserControl został usunięty bo za nic nie mogę go zlokalizować :D

Pozdrawiam

komentarz 14 lipca 2018 przez Paweł Makarewicz Nowicjusz (210 p.)
Dzięki, ale już widzę że to nie zadziała. Mój problem jest nieco bardziej złożony :) Ty masz bezpośredni dostęp do buttonów ponieważ oba znajdują się w Form1(). W moim przypadku jest tak że mam tak jakby dwa okna Form1() i Form2(). Z okna Form1() chce zmienić właściwości elementu znajdującego się w Form2(). Jest to możliwe do wykonania prawdopodobnie tylko przez delegowanie metod, właśnie z tym walczę :)
komentarz 15 lipca 2018 przez Crash182 Gaduła (3,600 p.)
Ale jak? Obie forms masz widoczne w tym samym czasie czy ta druga ma się pojawić dopiero jak coś klikniesz? Bo jeśli tak to możesz po prostu przesłać jakiś parametr w konstruktorze formy i na podstawie tego parametru ustawić odpowiedni kolor buttona na formie.

Jeśli jednak obydwie są już odpalone i jedna śmiga w tle to tak: robisz event w jednej formie a druga reaguje na ten event

Kiedyś pisałem coś o eventach, link poniżej.. może się przyda

https://forum.pasja-informatyki.pl/364558/czy-ktos-moglby-mi-pomoc-z-eventami

Pozdrawiam i powodzenia
komentarz 15 lipca 2018 przez Paweł Makarewicz Nowicjusz (210 p.)
U mnie są to akurat UserControl x2, obie widoczne. Tu jest poruszony ten problem https://www.youtube.com/watch?v=NDkOrzhz8Rg&t=962s

pozdrawiam

Podobne pytania

0 głosów
0 odpowiedzi 97 wizyt
0 głosów
0 odpowiedzi 184 wizyt
0 głosów
1 odpowiedź 610 wizyt

92,960 zapytań

141,922 odpowiedzi

321,158 komentarzy

62,295 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...