Avatar billede daxiez Nybegynder
02. marts 2006 - 20:45 Der er 10 kommentarer og
1 løsning

Drag and drop en button i winforms !

Hvordan kan jeg i runtime oprette en knap som brugeren selv kan place på formen ?
Avatar billede ali.k Nybegynder
02. marts 2006 - 20:59 #1
Du kan oprette en knap ved:

//Opretter Knap
Button MyButton = new Button();

//Angiver placering
Button1.Width = 100;
Button1.Height = 100;
Avatar billede ali.k Nybegynder
02. marts 2006 - 21:01 #2
Du kan evt. få brugeren til at angive placering i en TextBox, for derefter at smide det i en variable og erstatte:

Button1.Width = 100;
Button1.Height = 100;

Med:

Button1.Width = WDinVariable;
Button1.Height = HDinVariable;
Avatar billede daxiez Nybegynder
02. marts 2006 - 21:04 #3
Det er også fint nok, men hvordan placerer man knappen med "drag and drop", regner med at lave to forms hvorman på den ene kan placere knappen med musen, men knappen ikke virker. På en anden form vil knappen så have sin funktion !
Avatar billede ali.k Nybegynder
02. marts 2006 - 21:04 #4
Glemte at det var højde og bredde:(
Avatar billede daxiez Nybegynder
02. marts 2006 - 21:06 #5
Det er bare ikke bruger venligt nok, hvordan får man koordinater fra musens placering ?
Avatar billede ali.k Nybegynder
02. marts 2006 - 21:10 #6
Citat fra http://www.eksperten.dk/artikler/485:

// Hent musens position, og indskriv koordineterne
// - i labelen.
Graphics g = e.Graphics;
Point location = PointToClient(MousePosition);
label1.Text = string.Format("{0:0000},{0:0000}", location.X, location.Y);
Avatar billede daxiez Nybegynder
02. marts 2006 - 21:13 #7
prøver jeg lige !
Avatar billede ali.k Nybegynder
02. marts 2006 - 21:15 #8
MyButton.Width = WDinVariable;
MyButton.Height = HDinVariable;

Erstattes med:

MyButton.Location.X = PlaceringPåXakse;
MyButton.Location.Y = PlaceringPåYakse;

Da Width og Height angiver størrelse på knappen.
Avatar billede daxiez Nybegynder
02. marts 2006 - 21:15 #9
nice ! og tak for hjælpen ! smid et svar !
Avatar billede ali.k Nybegynder
02. marts 2006 - 21:18 #10
Hehe, det var godt;)
Avatar billede driis Nybegynder
02. marts 2006 - 21:32 #11
Jeg havde lige lavet et eksempel før jeg så der var svaret, så det skal du da ikke snyeds for:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace DropTest
{
    public class DragForm : Form
    {
        private Button button = new Button();
        private Timer timer = new Timer();
        private bool dragging = false;
        private int bCount = 0;
        private Pen drawPen = new Pen(Brushes.Navy, 1);
        private Point mousePos = new Point(0);

        public DragForm()
        {
            InitializeComponent();
        }

        private void InitializeComponent()
        {
            this.SuspendLayout();
            this.Text = "Dragging buttons is fun";

            // button
            this.button.Location = new System.Drawing.Point(12, 12);
            this.button.Size = new System.Drawing.Size(75, 23);
            this.button.TabIndex = 1;
            this.button.Text = "Drag me !";

            timer.Tick += delegate
            {
                if (dragging)
                    Invalidate();
            };
            timer.Enabled = true;
            timer.Interval = 20;
            // events
            this.button.MouseDown += new MouseEventHandler(button_MouseDown);
            this.button.MouseUp += new MouseEventHandler(button_MouseUp);

            this.Controls.Add(button);
           
            this.ResumeLayout();
        }

        void button_MouseUp(object sender, MouseEventArgs e)
        {
            if (dragging)
            {               
                Button b = new Button();
                b.Text = "Button" + bCount++.ToString();
                mousePos = PointToClient(MousePosition);
                b.Left = mousePos.X;
                b.Top = mousePos.Y;
                this.Controls.Add(b);
                dragging = false;
                Invalidate();
            }
        }

        void button_MouseDown(object sender, MouseEventArgs e)
        {
            dragging = true;         
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
           
            if (dragging)
            {
                Graphics g = e.Graphics;
                mousePos = PointToClient(MousePosition);
                g.DrawRectangle(drawPen, mousePos.X, mousePos.Y, button.Width, button.Height);
            }
        }

    }
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester