Visual C#, Centrowanie kontrolek w kontenerze

Visual C#, Centrowanie kontrolek w kontenerze
BA
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 11 lat
  • Postów:2
0

Hej,
czy ktoś mógłby mi podpowiedzieć co trzeba zrobić, żeby przeciągane kontrolki(w moim przypadku labele) do kontenera(panela) były w nim centrowane? Podaję fragment kodu dotyczący przeciągania/przesuwania kontrolki- nie wiem jak z poprawnością tego, ponieważ dopiero uczę się , ale działa.

Kopiuj
 private Point MouseDownLocation;
        

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void label1_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == System.Windows.Forms.MouseButtons.Left)
            {
                MouseDownLocation = e.Location;
                
            }
            
        }

        private void label1_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button == System.Windows.Forms.MouseButtons.Left)
            {
                label1.Left = e.X + label1.Left - MouseDownLocation.X;
                label1.Top = e.Y + label1.Top - MouseDownLocation.Y;
            }
        }

        private void panel1_DragDrop(object sender, DragEventArgs e)
        {
            Control Label = e.Data.GetData(e.Data.GetFormats()[0]) as Control;

            if (Label != null)
            {
                Label.Location = this.panel1.PointToClient(new Point(e.X, e.Y));
                this.panel1.Controls.Add(Label);
                
            }
        }

        
        private void panel1_DragOver(object sender, DragEventArgs e)
        {
            e.Effect = DragDropEffects.Move; 
        }
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:34 minuty
1

Label.Location = this.panel1.PointToClient(new Point(e.X, e.Y));

Zamiast e.X,e.Y wyliczasz pozycję na podstawie rozmiarów kontrolek (dodawanej i kontenera).

BA
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 11 lat
  • Postów:2
0

Hmm..coś chyba jest jednak nie tak jak być powinno, ponieważ nie ma realizacji tego co w DragDrop i w związku z tym zmiana e.X i e.Y nie daje efektu. Coś się chyba ze sobą "gryzie". Ktoś pomoże?

Azarien
nie masz zmieniać e.X i e.Y, masz go nie używać...
BA
Label.Location = this.panel1.PointToClient(new Point((panel1.Width - Label.Width) / 2, (panel1.Height - Label.Height) / 2)); Chodziło mi o zastąpieniem e.X i e.Y takim wyliczeniem. Robię błąd?
TE
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 11 lat
  • Postów:21
1

Musisz od szerokości kontenera odjąć szerokość dodawanej kontrolki i podzielić na dwa.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.