Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Moja prva kontrola, onPaint pitanje

[es] :: .NET :: Moja prva kontrola, onPaint pitanje

[ Pregleda: 1328 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Mikelly

Član broj: 16730
Poruke: 389
79.143.100.*



Profil

icon Moja prva kontrola, onPaint pitanje31.07.2009. u 18:57 - pre 179 meseci
Posto mi to jako cesto treba, rijesih da napravim sopstveni BindingNavigator. Posto mi je to prva kontrola koju pravim rijesih da krenem najlaksim (tako vele na netu) putem. Da naslijedim usercontrol.

Evo koda:
Code:

public partial class MyBindingNavigator : UserControl
    {
        private BindingSource _data;

        public MyBindingNavigator()
        {
            InitializeComponent();
        }

        public MyBindingNavigator(BindingSource bindingSource)
        {
            InitializeComponent();
            _data = bindingSource;
        }

        public BindingSource Data
        {
            set { _data = value; }
            get { return _data; }
        }

        protected override void OnPaint(PaintEventArgs e)
        {            
            this.Location = new Point(4, this.ParentForm.Height - 84);
            this.Width = this.ParentForm.Width - 8;
            base.OnPaint(e);            
        }              

        private void MyBindingNavigator_Load(object sender, EventArgs e)
        {
            this.Location = new Point(4, this.ParentForm.Height - 84);
            this.trackBar1.Maximum = _data.Count;
            this._data_CurrentChanged(this, new EventArgs());
            _data.DataSourceChanged += new EventHandler(_data_DataSourceChanged);
            _data.ListChanged += new ListChangedEventHandler(_data_DataSourceChanged);
            _data.CurrentChanged += new EventHandler(_data_CurrentChanged);
        }

        void _data_CurrentChanged(object sender, EventArgs e)
        {
            this.label1.Text = "Zapis " + (_data.Position + 1).ToString() + " od " + (_data.Count).ToString() + ".";
            if(trackBar1.Maximum != 0) this.trackBar1.Value = _data.Position + 1;
        }

        void _data_DataSourceChanged(object sender, EventArgs e)
        {
            trackBar1.Maximum = _data.Count;            
        }

        private void button1_Click(object sender, EventArgs e)
        {
            _data.MoveFirst();
        }

        private void trackBar1_ValueChanged(object sender, EventArgs e)
        {
            _data.Position = ((TrackBar)sender).Value - 1;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            _data.MovePrevious();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            _data.MoveNext();
        }

        private void button4_Click(object sender, EventArgs e)
        {
            _data.MoveLast();
        }

        private void button5_Click(object sender, EventArgs e)
        {
            _data.AddNew();
        }

        private void button6_Click(object sender, EventArgs e)
        {
            MyMessageBox message = new MyMessageBox("Da li ste sigurni da brišete zapis?", MessageBoxButtons.YesNo);
            if(message.ShowDialog() == DialogResult.Yes)_data.RemoveCurrent();            
        }        
    }


Imam ideju da se ta kontrola automatski (cim se doda u kolekciju kontrola forme preko controls.add) pozicionira na dno forme, i da se promjenom okvira forme moja kontrola sama prilagodjava.

Pokusao sam da override-ujem onPaint dogadjaj osnovne klase. Medjutim, to radi samo polovicno. Kada uradim maximize forme, kontrola se sasvim dobro prilagodi i kulturno se smjesti u dno forme. Ali, klik na restore nece izazvati prilagodjavanje kontrole, tj. kontrola ce ostati na lokaciji koju je maloprije zauzela. Dalje, promjena vertikalne ivice forme uvijek izaziva prilagodjavanje kontrole, a promjena horizontalne ivice forme ne, osim u slucaju kada horizontalna ivica dotice kontrolu.

Totalno sam nov u ovome, pa mi je svaka smjernica dobrodosla.

Pozdrav i hvala.
 
Odgovor na temu

Sapphire
Denis Biondić
.NET software developer
Nürnberg, Germany

Član broj: 213086
Poruke: 290
62.113.8.*



+6 Profil

icon Re: Moja prva kontrola, onPaint pitanje01.08.2009. u 00:53 - pre 179 meseci
Nemam sad volje da detaljno čitam, ali koliko shvaćam, ti jednostavno želiš da ti kontrola uvijek bude na dnu forme?

Problem je što ovo ne možeš postići preko Paint eventa, jer resize forme ne uvjetuje njegovo "okidanje". Zašto se ne pokušaš jednostavno registrovati na ParentForm SizeChanged event, naravno unutar user kontrole? Ovaj kod iz OnPaint()-a stavi u event handler metodu, registruj je na this.ParentForm.SizeChanged += NekaHandlerMetoda, a ovu liniju za registrovanje stavi u Load event user kontrole, jer se tad osigurava da će ParentForm biti postavljen...

My programs don’t have bugs, they just develop random features.
 
Odgovor na temu

Mikelly

Član broj: 16730
Poruke: 389
79.143.100.*



Profil

icon Re: Moja prva kontrola, onPaint pitanje01.08.2009. u 19:05 - pre 179 meseci
To je to.

Thnx.
 
Odgovor na temu

[es] :: .NET :: Moja prva kontrola, onPaint pitanje

[ Pregleda: 1328 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.