klasa dziedziczaca po klasie formularza a zmiana wlasciwosci kontrolki z klasy nadrzednej

0

Mam klase formularza:

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

        private void button1_Click(object sender, EventArgs e)
        {
            Class1 class1 = new Class1(); //inicjalizacja obiektu nowej klasy
        }
    }
}

W nowej klasie dziedziczacej po niej chcialbym zmienic tekst wyswietlany na kontrolce button1 po jej kliknieciu:

 
namespace WindowsFormsApplication1
{
    public class Class1 : Form1
    {
        public Class1()
        {
            button1.Text = "ccccccc";
        }

    }
}

Jednak po kliknieciu buttona tekst nie ulega zmianie - dlaczego ?

0

Bo po kliknięciu buttona tworzysz formę bliźniaczą do Form1 - obiekt klasy Class1. Gdybyś w OnClick buttona dodał linijkę

class1.Show() 

to pokaże ci się nowa forma, ze zmienionym tekstem na buttonie, ale nie zmieni to tekstu na buttonie formy głównej

0

A nie ma opcji zeby w Class1 zmienic text buttona formy bazowej ?

0

No pewnie, że jest. Albo przekazując referencję do form1, albo za pomocą delegatów.
Ale może lepiej napisz co chcesz konkretnie zrobić? Tylko zmienić tekst buttona?

0

Tak chciałbym zmienić tekst na buttonie z innej klasy niż Form1 - jak to można zrobić za pomocą delegatów, bo za pomocą referencji to wiem.

0

Tak na szybciora pisałem, sposób na zmianę za pomącą delegata:
Kod Form1

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

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 f = new Form2();
            f.ChangeButtonText += this.ChangeButtonText;
            f.Show();
        }
        private void ChangeButtonText()
        {
            this.button1.Text = "Jakis tam twoj tekst";
        }
    } 

Kod Form2(rozumiem, że nie jest wymagane by form2 dziedziczyła od form1)

 public partial class Form2 : Form
    {
        public delegate void ChangeButtonTextDelegate();
        public ChangeButtonTextDelegate ChangeButtonText;
        public Form2()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (ChangeButtonText != null)
                this.ChangeButtonText();
        }
    }

Na obu formach połóż bo buttonie i podepnij zdarzenia OnClick

A tu jest sposob za pomaca referencji(ale stosuj ten za pomoca delegatow):
Kod Form1:

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

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 f = new Form2();
            f.FriendlyForm= this;
            f.Show();
        }

        public string ButtonText
        {
            get { return this.button1.Text; }
            set { this.button1.Text = value; }
        }

        public void ChangeButtonText(string text)
        {
            this.button1.Text = text;
        }
    } 

Kod Form2:

public partial class Form2 : Form
    {
        private Form1 friendlyForm;
        public Form2()
        {
            InitializeComponent();
        }

        public Form1 FriendlyForm
        {
            set { this.friendlyForm= value; }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (this.friendlyForm != null)
            {
                this.friendlyForm.ButtonText = "Jakis tam twoj tekst";
                //lub to samo za pomoca metody(odkomentuj):
                //this.friendlyForm.ChangeButtonText("Jakis tam twoj tekst");
            }
            

        }
    } 
0

dzieki wielkie :)

0
lulu napisał(a)

A nie ma opcji zeby w Class1 zmienic text buttona formy bazowej ?

Kontrolki formatek domyślnie mają modyfikator dostępu private, jeśli chcemy zmieniać ich właściwości w formatce dziedziczącej, trzeba go po prostu zmienić na odpowiedni. (Nawet w designerze.)

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