[Usercontrol] dodawanie zdarzeń komponentów kontrolki

0

ok, działa, dzięki comp~~

kolejny problem:

Moja kontrolka zawiera kilka textboxów i button.
Chciałbym, aby po kliknięciu buttona ze stworzonej kontrolki była wywoływana metoda należąca do klasy forma, gdzie ta kontrolka widnieje.

Chodzi mi o dodanie nowego zdarzenia do zdarzeń kontrolki. (Aby było wyświetlane razem z innymi zdarzeniami kontrolki w oknie properties, obok Load, Click, SizeChanged, itp), gdzie mogłbym dodać metodę obsługującą to zdarzenie.

Np AcceptButtonClick.

pzdR

0

Widać, że kontrolka jest dodana, także do toolboxa. Rozejrzyj sie w zakładnce Components toolboxa.

0

poszukaj, było już..

0

Załóżmy, że na kontrolce jest txtValue i btnAccept:

using System;
using System.Windows.Forms;

namespace UserControlEventTest
{
    public partial class TextBoxAndButtonsControl : UserControl
    {
        public event EventHandler OnAcceptButtonClick;

        public string UserText
        {
            get { return this.txtValue.Text; }
        }

        public TextBoxAndButtonsControl()
        {
            InitializeComponent();
        }

        private void btnAccept_Click(object sender, EventArgs e)
        {
            if (this.OnAcceptButtonClick != null)
                OnAcceptButtonClick(this, EventArgs.Empty);
        }

       
    }
}

A na formatce jest taka kontrolka i label1:

using System;
using System.Windows.Forms;

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

        private void textBoxAndButtonsControl1_OnAcceptButtonClick(object sender, EventArgs e)
        {
            this.label1.Text = this.textBoxAndButtonsControl1.UserText;
        }
    }
}

0

super, o to chodziło, dzięki

a tak przy okazji.
Pewnie się podobnie robi.
Aby dana kontrolka miała dodatkowe edytowalne pole w properties, obok Text, Size, itp
Jak dodać? Jakie to słowo kluczowe?;p Bo chyba sie deklaruje podobnie do eventu.

0

Słowo kluczowe "rzeżucha".

Wiesz, M$ tak to wszystko sprytnie pokręcił, żeby nikt się nie domyślił, że jeśli chcesz mieć właściwość, to musisz zrobić właściwość, a jak chcesz mieć zdarzenie, to musisz zrobić zdarzenie. Jest to całkowicie nielogiczne, przez co większość ludzi nie jest w stanie tego pojąć i dlatego nie jest programistami.

Pewno nie zauważyłeś, że właściwość UserText z kodu powyżej jest widoczna w oknie "Properties", jest jednak "wyblakła". Z prostej przyczyny - bo została (trudne słowo) zaprogramowana tak, aby była tylko do odczytu. Jeśli chcesz móc zmieniać jej wartość w designerze, to musisz sprawić, aby można było programowo zmieniać jej wartość, czyli dopisać settera. Prawda, że idiotyczne?

0

Dołączę się bo mam podobny problem. Moja kontrolka zawiera kolekcję jako property i wszystko ok widzę to. W edytorze kolekcji w designerze widzę natomiast tylko property itema kolekcji a pomimo zaimplementowania evensa nie widzę nic nawet przycisku z błyskawicą. Czy należy włączyć jakiś atrybut? W obiekcie itemie kolekcji mam zaimplementowane tylko

public event EventHandler ButtonClicked;

Czyli dla każdego itema z kolekcji chciałbym mieć możliwość ustawiania "czegoś". Generalnie z poziomu kodu widzę to zdarzenie ale chciałbym go widzieć również z poziomu designera.

Z góry dziękuję za pomoc.

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