C#控件移动的问题

1、有一个窗体FORM,它内有一个控件(比如btn),可以在运行时,用鼠标拖动btn任意移动,但是不能移出FORM的范围。2、右键菜单通过this.Controls.Ad... 1、有一个窗体FORM,它内有一个控件(比如btn),可以在运行时,用鼠标拖动btn任意移动,但是不能移出FORM的范围。
2、右键菜单通过this.Controls.Add()创建一个新控件,如何使它被创建在鼠标所在的位置(或者指定坐标)
谢谢!
最好写下简单代码,或者有例子,谢谢了!初学比较喜欢看着例子来
展开
 我来答
cydfli
推荐于2016-11-03 · TA获得超过406个赞
知道小有建树答主
回答量:273
采纳率:0%
帮助的人:206万
展开全部
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WinFormTest
{
    public partial class frmMain : Form
    {
        private Point Old, Now;
        private int btnCount;
        public frmMain()
        {
            InitializeComponent();
            this.Old = new Point(this.btn.Left, this.btn.Top);
            this.Now = new Point(this.btn.Left, this.btn.Top);
            this.btnCount = 1;
        }


        private void btn_MouseDown(object sender, MouseEventArgs e)
        {
            this.Old = new Point(e.X, e.Y);
        }

        private void btn_MouseUp(object sender, MouseEventArgs e)
        {
            this.Now = new Point(e.X, e.Y);
            if(this.Old!=this.Now)
            {
                this.btn.Left = this.btn.Left + this.Now.X - this.Old.X;
                this.btn.Top = this.btn.Top + this.Now.Y - this.Old.Y;
            }
        }

        private void frmMain_MouseClick(object sender, MouseEventArgs e)
        {
            Button x = new Button();
            x.Text = "动态按钮" + this.btnCount.ToString();
            x.Left = e.X;
            x.Top = e.Y;
            this.Controls.Add(x);
            this.btnCount++;
        }

    }
}

追问
谢谢你,不过,我把你的代码粘过来运行了下,拖动和新建都没有成功,请问是我哪里没有设置好吗?locked是false。我的程序:主form,分为上中下三个panel,上是菜单,中是TAB,下是状态栏,都放在panel中DOCK是FILL,想要在TAB中通过单击菜单栏按钮来新建一个控件,且该控件可以拖动但不出TAB的范围。我现在的问题是新建了控件但是看不见,是不是有顺序问题?怎么修改呢?麻烦了。
追答


按照你的原本意图:

增加了三个panel如你的一样,加了一个tabControl1在中间的那个panel上;

创建一个简单的contextMenuStrip控件,并更名为cms,只加了一个菜单项“新增按钮”,“新增按钮ToolStripMenuItem_Click”是其被点击时的事件处理程序

将tabControl1的ContextMenuStrip设置为cms


以上只为实现你要的效果,进行的简单界面绘制,你要的例子全包含了

freeeeeewind
2014-03-28 · TA获得超过1万个赞
知道大有可为答主
回答量:3227
采纳率:94%
帮助的人:1319万
展开全部

移动控件:

 Point p0;
bool b = false;
private void button1_MouseDown(object sender, MouseEventArgs e)
        {
            //记录下鼠标位置坐标
            p0 = new Point(e.X, e.Y);
            //设置移动标志
            b = true;
        }

 private void button1_MouseMove(object sender, MouseEventArgs e)
        {
            if (!b) return; //移动标志为false,退出
            //移动
            button1.Location = new Point(button1.Left -p0.X +e.Location.X  ,button1.Top -p0.Y +e.Location.Y);
            button1.Refresh();
        }

 private void button1_MouseUp(object sender, MouseEventArgs e)
        {
            //清除移动标志
            b = false;
        }

添加一个控件:

  private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            //在窗体上按下鼠标右键
            if (e.Button == System.Windows.Forms.MouseButtons.Right)
            {
                Button btn = new Button();
                btn.Text = "新加按钮";
                this.Controls.Add(btn);
                btn.Location = e.Location;
            }

        }

 完整的代码

using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        Point p0;
        bool b = false;
        private void button1_MouseDown(object sender, MouseEventArgs e)
        {
            p0 = new Point(e.X, e.Y);
            b = true;
        }

        private void button1_MouseMove(object sender, MouseEventArgs e)
        {
            if (!b) return;
            button1.Location = new Point(button1.Left -p0.X +e.Location.X  ,button1.Top -p0.Y +e.Location.Y);
            button1.Refresh();
        }

        private void button1_MouseUp(object sender, MouseEventArgs e)
        {
            b = false;
        }

        private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            //在窗体上按下鼠标右键
            if (e.Button == System.Windows.Forms.MouseButtons.Right)
            {
                Button btn = new Button();
                btn.Text = "新加按钮";
                this.Controls.Add(btn);
                btn.Location = e.Location;
            }
        }

    }
}
更多追问追答
追问
谢谢你,不过,我把你的代码粘过来运行了下,拖动和新建都没有成功,请问是我哪里没有设置好吗?我的程序:主form,分为上中下三个panel,分别为上是菜单,中是一个TAB,下是状态栏,都放在panel中DOCK是FILL,想要在TAB中通过单击菜单栏某个按钮来新建一个控件,并且该控件可以任意拖动但不出TAB的范围。我现在的问题是新建了控件但是看不见,是不是INDEX的问题?怎么修改呢?麻烦了。
追答
上面的例子是一个窗体,窗体只有一个Button控件——button1;演示的是在窗体中移动、添加控件。其实Tab、Panel和窗体一样,都是容器类控件(可以容纳其他控件的控件)。在Tab或Panel中移动、添加控件,与在Form中是一样的。
能把你的窗体截图上传吗?
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
斯内科Snake
2014-03-28 · TA获得超过523个赞
知道小有建树答主
回答量:707
采纳率:50%
帮助的人:238万
展开全部
这个你可以用silverlight 很多空间都有随意拖动的功能。不过一般这种技术被flash所替代
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式