[C#] modyfikacja komponentu na formie z poziomu klasy

0

Cześć,

mam formularz który powoli staje się bardzo rozbudowany, posiada wiele funkcji i zaczynam się powoli gubić. Część kodu chciałbym przerzucić do osobnych plików ponazywanych odpowiednio do roli która mają pełnić w projekcie. Tworzę sobie klasę xyz w osobnym pliku ale nie mogę z jej poziomu nawet zmienić właściwości label na form1.

form1 zawiera label1

chciałbym z poziomu klasy xyz (znajdującej się w pliku xyz.cs) zmienić właściwość TEXT dla label1.

Z góry dzięki za info.

pozdrawiam
Jacek

0

No i przekazywanie label1 do jakiejś metody klasy xyz nie działa, czy co?

0

Odwrotnie, z poziomu klasy xyz chciałbym zmienić właściwość obiektu znajdującego się na formie1.
chodzi mi o to iż chciałbym w klasie xyz umieścić kod modyfikujący właściwość kontrolki znajdującej się na formie, np

zawartość pliku Form1.cs

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 WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        class1 klasa = new class1();
        public Form1()
        {
            InitializeComponent();

        }
        private void button1_Click(object sender, EventArgs e)
        {
            klasa.settekst();
        }
    }
}

a poniżej zawartość klasy w pliku class1.cs

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 WindowsFormsApplication1
{
    class class1
    {
        public void settekst()
        {
            label1.Text = "Hello World";
        }

    }
}

to nie działa. Pewnie jest to proste ale zupełnie sobie z tym nie radze. Help...

0

Nic nie odwrotnie. Nie działa, bo nie przekazałeś tego labela do metody.

private void button1_Click(object sender, EventArgs e)
{
    klasa.settekst(this.label1);
}
public void settekst(Label labelPrzekazanyWArgumencieMetody)
{
    labelPrzekazanyWArgumencieMetody.Text = "Hello World";
}
0

Chyba jedyną metodą jest przekazanie kontrolki do funkcji (public void UstawTekstLabelowi(Label mojLabelZForm1)). Raczej nie ma innej metody, choć mogę się mylić.

0

Poprawa: Przekazanie argumentu typu Label do metody danej klasy.

0

Lepiej przekazać do własności, tj w twojej kontrolce tworzysz sobie własność typu Label:

class MojaKontrolka
{
    private Label labelDoWyswitlaniaCzegosPrzezKontrolke = null;

    public Label LabelDoWyswitlaniaCzegosPrzezKontrolke
    {
        get { return labelDoWyswitlaniaCzegosPrzezKontrolke ; }
        set { labelDoWyswitlaniaCzegosPrzezKontrolke = value; }
    }
}

Jak kontrolka chce coś wyświetlić na na tym label'u piszesz:

if (labelDoWyswitlaniaCzegosPrzezKontrolke != null) labelDoWyswitlaniaCzegosPrzezKontrolke.Text = blablabla;

A tworząc kontrolkę na formię przypisujesz jej odpowiedni label:

kontrolka = new MojaKontrolka();
kontrolka.LabelDoWyswitlaniaCzegosPrzezKontrolke = Label1;

Powyższą operację będzie się również dało wykonać w designerze na palecie "Properties", jeśli kontrolka jest "wyklikana" na formie.

0

dzięki za odpowiedź.

pozdrawiam
J

0

Przeczytaj o modelach projektowania aplikacji np. MVP który bardzo lubie i uzywam albo MVC są jeszcze inne :)

MVP - Model View Presenter
MVC - Model View controler

à propos MVP:

na forme nakładasz interfejs View który obcina cią ją do kontrolek albo wlasciwości które potrzebujesz z nich :P
presentera trzymasz jako pole w Formie i w jego konstruktorze wrzucasz (View)this i masz w oddzielnej klasie dostep do wszystkeigo co masz w formie :] a jesli chodzi o zdarzenia to wywołujesz w nich funkcje presentera a prezenter wewnetrznie moze sie łączyć z jakimś modelem danych i uzupełniać to i owo. dzieki takiemu rozwiazaniu łatwo kontrolujesz wygląd aplikacji na formatce, obróbke i wrzucanie danych w prezenterze i ładowanie danych z jakiegos miejsca np. z bazy albo plików albo bóg wie czego w modelu danych :)

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