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.


Anmelden zum Antworten