[ Mikelly @ 31.07.2009. 18:57 ] @
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. |