2017-12-18 2 views
0

Ich muss oben und unten Taste vertikalen Scrollen für Flow-Layout-Panel Elemente erstellen.Wie kann ich tun? Ich werde dieses Formular für POS machen.Wie erstellt man benutzerdefinierte Scroll-Taste für Flow-Layout-Panel in C#

Ich habe diesen Weg gemacht, aber es funktioniert nicht: Ich habe viele Tasten, die Größe 87 haben: Ich habe Code und Bild hinzugefügt.

flowlayoutexample

private void btnScrollUp_Click(object sender, EventArgs e) 
    { 


     flowLayoutPanel1.VerticalScroll.Value = flowLayoutPanel1.VerticalScroll.LargeChange-1 ; 
     flowLayoutPanel1.PerformLayout(); 



    } 

    private void btnScrollDown_Click(object sender, EventArgs e) 
    { 


     flowLayoutPanel1.VerticalScroll.Value = flowLayoutPanel1.VerticalScroll.LargeChange+ 1; 
     flowLayoutPanel1.PerformLayout(); 


    } 
+0

einer der wichtigsten Gründe, dies nicht ist Sie = stattdessen verwendet funktioniert von + =/- =, aber diese Werteigenschaft verhält sich merkwürdig mit + = auf jeden Fall, siehe meine Antwort unten für eine vollständige Antwort, die behebt, was du hier getan hast :) – chrispepper1989

+0

Interessant, warum machst du es im Code? warum nicht einfach flowLayoutPanel1.AutoScroll = true; flowLayoutPanel1.VerticalScroll.Visible = true; – chrispepper1989

+1

Becuase dieses Programm wird Touchscreen-Maschine verwenden.So muss ich große Taste zum Scrollen setzen :) –

Antwort

1

Alternativ können Sie nur wollen „Autoscroll“ false den folgenden Code setzen implementiert richtige programmatische blättern:

public Form1() 
    { 
     InitializeComponent(); 
     flowLayoutPanel1.AutoScroll = false; 

    } 

    public int scrollValue = 0; 
    public int ScrollValue 
    { 
     get 
     { 


      return scrollValue; 
     } 
     set 
     { 
      scrollValue = value; 

      if (scrollValue < flowLayoutPanel1.VerticalScroll.Minimum) 
      { 
       scrollValue = flowLayoutPanel1.VerticalScroll.Minimum; 
      } 
      if (scrollValue > flowLayoutPanel1.VerticalScroll.Maximum) 
      { 
       scrollValue = flowLayoutPanel1.VerticalScroll.Maximum; 
      } 

      flowLayoutPanel1.VerticalScroll.Value = scrollValue; 
      flowLayoutPanel1.PerformLayout(); 

     } 
    } 
    private void Add_Control(object sender, EventArgs e) 
    { 
     flowLayoutPanel1.Controls.Add(new Button(){Width = flowLayoutPanel1.Width, Height = 87}); 
    } 

    private void UpClick(object sender, EventArgs e) 
    { 
     ScrollValue -= flowLayoutPanel1.VerticalScroll.LargeChange; 

    } 

    private void DownClick(object sender, EventArgs e) 
    { 
     ScrollValue += flowLayoutPanel1.VerticalScroll.LargeChange; 
    } 
+0

hi @ chrispepper1989 es funktioniert nicht, es gibt dieses Problem {"Wert von '110' ist nicht gültig für 'Value'. "Wert" sollte zwischen "Minimum" und "Maximum" liegen. \ R \ nParametername: Wert "} –

+0

siehe den überarbeiteten Code, der Sicherheitsvorkehrungen hinzufügt :) – chrispepper1989

+0

ps Vielleicht möchten Sie auch überprüfen, was Ihr "flowLayoutPanel1.VerticalScroll.LargeChange" eingestellt ist. wenn es auf etwas zu hoch eingestellt ist, würde es nicht nur aus dem min/max herausgehen, aber du würdest es nie bewegen sehen :) setze es auf 5 oder etwas, um mit – chrispepper1989

0

Welche Art von blättern versuchen Sie zu erreichen, würde dieser Code Sie tun?

How to Programmatically Scroll a Panel

Auf diese Weise können Sie pro Kontrolle scrollen, anstatt eine „glatte“ blättern, aber ich denke, das für Ihre Anwendung funktionieren würde.

Verwandte Themen