Panel Scrollen - eine Lösung gesucht
-
Moin Leute ...
folgendes Problem: Habe einige Panel - Elemente welche ich mit eigenen Elementen versuche zu Scrollen. Aber da ist mal wieder irgendwo der Wurm drin - nur find ich ihn nicht.
public ref class hddpanel : public Sidebar::panelklasse { public: static System::Collections::Generic::List<System::IO::DriveInfo^> laufwerke = gcnew System::Collections::Generic::List<System::IO::DriveInfo^>(); protected: static bool firststart = true; protected: protected: static int MINscrollpos = 0, MAXscrollpos, scrollpos = 0; protected: static int ansichtmodus = 0; ... ... private: System::Void pictureBox1_Click(System::Object^ sender, System::EventArgs^ e) { // Hoch Scrollen scrollpos -=15; panel1->Visible = false; panel1->Invalidate (); if ( scrollpos < MINscrollpos ) scrollpos = MINscrollpos; panel1->VerticalScroll->Value = scrollpos; panel1->Visible = true; panel1->Invalidate (); } private: System::Void pictureBox2_Click(System::Object^ sender, System::EventArgs^ e) { // Runter Scrollen scrollpos +=15; panel1->Visible = false; panel1->Invalidate (); if ( scrollpos < MINscrollpos ) scrollpos = MINscrollpos; panel1->VerticalScroll->Value = scrollpos; panel1->Visible = true; panel1->Invalidate (); } ... ... void Sidebar::hddpanel::anzeigeeinrichten () { PictureBox^ pb; Label^ lb; ProgressBar^ bar; int pos = 10; for (int x = 0; x < systemlaufwerke; x++) { // neue PictureBox erstellen pb = gcnew PictureBox (); panel1->Controls->Add (pb); pb->Location = System::Drawing::Point ( 0, pos); pb->BackgroundImageLayout = ::ImageLayout::Zoom; pb->Image = imageList1->Images[0]; pb->Size = System::Drawing::Size ( 40, 40); pb->BackColor = Color::Transparent; pb->Name = "neupicturebox" + x.ToString (); // <-- Hier der neue Name ( zum suchen ) pb->TabIndex = 0; pb->TabStop = false; // neue ProgressBar bar = gcnew ProgressBar (); bar->Location = System::Drawing::Point ( 55, pos + 25); bar->Size = System::Drawing::Size ( 110, 8 ); bar->Minimum = 0; bar->Maximum = 100; bar->Style = ProgressBarStyle::Blocks; bar->Visible = true; bar->Enabled = true; bar->Value = 20; bar->Name = "neubar" + x.ToString (); panel1->Controls->Add (bar); // neues Label erstellen lb = gcnew Label (); lb->Location = System::Drawing::Point ( 55, pos); lb->AutoSize = true; lb->ForeColor = Color::White; lb->BackColor = Color::Transparent; lb->Visible = true; lb->Name = "neulabel" + x.ToString (); lb->Text = laufwerke[x]->Name + " " + laufwerke[x]->VolumeLabel; panel1->Controls->Add (lb); pos = pos + 50; } MAXscrollpos = pos; panel1->VerticalScroll->Minimum = MINscrollpos; panel1->VerticalScroll->Maximum = MAXscrollpos; } ... ...
Mir geht es halt darum - die für diesen Zweck recht hässlichen Scrollbars zu verbannen. Auch erscheint mir die ganze Bewegung hier zu "abgehackt". Vielleicht hat einer von euch einen besseren Ansatz oder einen Tip
Ausserdem habe ich das Problem, dass wenn ich einmal die Ansicht runter - gescrollt habe, und versuche wieder noch oben zu kommen, fehlt mir immer ein Stück des bspw. ersten Labels. Es sieht also aus, als wenn die VScrollPosition noch nicht 0 erreicht hätte - was sie aber haben sollte.