• 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
827 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 81 wizyt
0 głosów
0 odpowiedzi 159 wizyt
0 głosów
1 odpowiedź 451 wizyt

92,454 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 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.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...